Click here to Skip to main content
12,819,402 members (32,266 online)
Click here to Skip to main content
Add your own
alternative version

Tagged as


1 bookmarked
Posted 21 Nov 2011

KeyWedge: Updated

, 21 Nov 2011 CPOL
Rate this:
Please Sign up or sign in to vote.
KeyWedge: Updated

At KeyWedge, I posted my code that connects to a serial port and then simulates keystrokes into your application.

Now, there were issues where the reconnect did not automatically take place after a Suspend/Resume and you had to invoke the main window and select File-Hide just to let KeyWedge reconnect. This happens on devices that provide the communication port all the time and don't close it during a suspend.

I have added some code to watch the Windows Mobile Power Message Queue for RESUME messages and then do an automatic reconnect. The other option would have been to send some data through the port periodically to check if it is still working. But this may disturb the attached device.

The main change is in PowerMsgQueue.cpp. It implements the msg queue to receive power broadcast messages like done in an MSDN example code. If a resume message is encountered, the code sends a WM_USER message to the main window, which will do a SuspendComm/ResumeComm cycle. Very easy.

In PowerMsgQueue.cpp, we have code that recognizes the resume:

      nclog(L"Power Notification Message: PBT_TRANSITION\n");
 //Add2Log(L"Power Notification Message: PBT_TRANSITION\n",TRUE);
      nclog(L"Flags: %lx\n", ppb->Flags);
      nclog(L"Length: %d\n", ppb->Length);
 wsprintf(szPBtype, L"trans.: ");
Flags: 12010000
Length: 6
 if(ppb->Flags & 0x12010000)
   nclog(L"PwrMsgQueue: got 'ON|PASSWORD|BACKLIGHTON'...\n");
   //send a message to main window
   iPost = PostMessage(hwndMain, WM_USER_RESUMECOMM, 0, 0);
   nclog(L"PostMessage WM_USER_RESUMECOMM returned %i\n", iPost);
     case PBT_RESUME:
      nclog(L"Power Notification Message: PBT_RESUME\n");
 //Add2Log(L"Power Notification Message: PBT_RESUME\n",TRUE);
 wsprintf(szPBtype, L"resume: ");
 //send a message to main window
 iPost = PostMessage(hwndMain, WM_USER_RESUMECOMM, 0, 0);
 nclog(L"PostMessage WM_USER_RESUMECOMM returned %i\n", iPost);
 nclog(L"Power: PBT_RESUME\n");

To not block the queue, I use PostMessage to inform the main window of the Resume. Here is the simple code block in WndProc of the main window:

case WM_USER_RESUMECOMM: //will be called from bg thread after suspend/resume
nclog(L"WndProc: received WM_USER_RESUMECOMM: restarting COMM\n");
resumeCOMM(); //suspend is called in MYMSG_TASKBARNOTIFY

The msgQueue thread is created in InitInstance of the main window:

//create PowerResume watchdog thread
  nclog(L"InitInstance: startMsgThread() OK\r\n");
  nclog(L"InitInstance: startMsgThread() FAILED\r\n");


ShowWindow(hWnd, SW_HIDE);//nCmdShow);

Have fun coding!



This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


About the Author

Germany Germany
No Biography provided

You may also be interested in...

Comments and Discussions

-- There are no messages in this forum --
Permalink | Advertise | Privacy | Terms of Use | Mobile
Web01 | 2.8.170308.1 | Last Updated 21 Nov 2011
Article Copyright 2011 by hjgode
Everything else Copyright © CodeProject, 1999-2017
Layout: fixed | fluid