Chủ đề: [VC] PrevInstance ???
-
12-11-2006, 08:25 AM #1Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
hPrevInstance không có tác dụng trên Win32, luôn mang giá trị 0. Là tàn tích của Win16. Dùng FindWindows, sharemem hay mutex để viết single instance.
View more random threads:
- Multi color trong 1 Editbox control giống cửa sổ chat của Yahoo
- Chặn không cho yahoo đăng nhập.
- Cách khai báo #include trong lập trình C
- AntiHack Game - Source Check title Gần đúng
- ko mở dc thư viện GRAPHICS.H trong Visual C++ mong dc giúp đở
- Antivirus lấy các hàm API trong PE File bằng cách nào
- xuất liên tục ra màn hình
- Thread's Message Queue là gì?
- Mình không hiểu một số dòng lệnh! Mọi người giải đáp dùm mình được không?
- Lỗi khó hiểu khi làm tab control trong vc++ 7.1
-
12-11-2006, 03:12 PM #2Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
FindWindows không dùng được với các ứng dụng không có Windows [IMG]images/smilies/biggrin.png[/IMG]. Còn ShareMem thì em chưa dùng bao giờ. Nói chung là khoái Mutex.
Lập trình trong Win có cái Event, Mutex... thoải mái thật. Hôm nọ em bập bẹ làm cho vi xử lý mấy tí -> ngán ngẩm cả người.
-
12-11-2006, 05:11 PM #3Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Mình cũng không biết là có tất cả những cách nào để phát hiện ra một instance đã có nhưng thấy cách dùng Mutex là ngắn gọn nhất:
Mã:HANDLE CheckPreviousApp(const wchar_t* MutexName) { HANDLE Mutex = CreateMutex(NULL, true, MutexName); int nResult = GetLastError(); if (nResult == ERROR_ALREADY_EXISTS) return 0; else return Mutex; }
Mã:Mutex = CheckPreviousApp(L"test"); if (!Mutex) return 0;
-
12-11-2006, 05:43 PM #4Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
[VC] PrevInstance ???
Em muốn chương trình của mình chỉ đc. chạy 1 lần, em thấy trong hàm WinMain có tham số PrevInstance nhưng nó luôn mang giá trị 0, kể cả đã có 1 íntance trước đó
Làm sao để biết đã có 1 íntance của chương trình ???
-
12-11-2006, 06:30 PM #5Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Giả sử chúng ta có vấn đề sau: app của ct đã run và minimize xuống Tray Icon, giờ user run app của ta lần 2. Yêu cầu là windows của app chúng ta phải restore và show lên, và chỉ 1 instance. Làm theo cách mutex, event with name không giải quyết được vấn đề này.
-
13-11-2006, 11:21 AM #6Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Gửi bởi TQN
-
13-11-2006, 02:33 PM #7Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Gửi bởi TQN
-
13-11-2006, 03:59 PM #8Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
FindWindows cũng không dùng được, vì có trường hợp user run 2 instance liên tiếp nhau (vd: double click 2 lần thiệt nhanh), khi đó main window handle chưa có do đang trong quá trình khởi tạo.
-
19-11-2006, 03:45 PM #9Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Gửi bởi TQN
- Process của ta khi start lên thì phải signal một event, ví dụ "I'm started".
- Process của ta khi đã Minimize trên System Tray thì phải:
+ Signal event, ví dụ "I'm minimized"
+ Wait trên một event khác, ví dụ "NotifyMe".
- Khi user start một process mới, kiểm tra xem có event "I'm started" chưa? Nếu có rồi thì xem có "I'm minimized" kô? Có nữa thì signal event "NotifyMe" và kết thúc. Khi đó, thread mà wait cái event "NotifyMe" sẽ tự động restore lại cái cửa sổ.
Ngoài ra, các kỹ thuật để chạy 1-instance có thể dùng: socket, lock file...
Thực chất mọi kỹ thuật này là Inter-Process Communication (IPC)
-
21-11-2006, 05:35 PM #10Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Tui nói là app đã minimize xuống tray icon, chứ không phải là taskbar. App đầu chả lẽ cứ đứng đó mà wait hay check liên tục cho event NotifyMe à, sao "xài sang" thế.
Thông qua phân tích dữ liệu Google từ 86 quốc gia, mới đây, một công ty tại Anh đã công bố bảng xếp hạng kích tấc "cậu nhỏ" của các nước trên thế giới. Kết quả, hầu hết các nước xếp ở nhóm đầu của...
"Chim" của chàng trai Việt thuộc...