Re: How to detect when a user switches between windows (in WinXP)?
Tim Roberts wrote: [EMAIL PROTECTED] wrote: I'm a beginning-to-intermediate Python programmer with some experience in other languages. At the moment I am trying to write a Python program that will run in the background and execute a series of commands whenever I switch between windows (my OS is Windows XP). For example, I want my program to do something when I switch to my Firefox browser, and then do something else when I switch to a certain sub- window in Photoshop (which has a certain title, and a certain photo associated with it), then do yet another thing when I switch to another sub-window (with a different title and photo) within Photoshop. The particular actions will be based on the window's title. I've already figured out how to retrieve that, using GetWindowText(GetForegroundWindow()) from the win32gui module. My question is, how can I detect when the user switches between windows? I haven't been able to figure that part out yet. Searching the group didn't give me any answers. The way you do this is to write a Windows hook. The WH_CBT hook intercepts WM_ACTIVATE and WM_DEACTIVATE calls system-wide. However, that requires injecting the hook DLL into every process with a Windows, and you certainly don't want to do that in Python. Write a minimal C DLL to be the hook, and have it send messages to your Python process. Also, aside from the technicalities of how you do this, be sure you've thought through the effect on user-interaction (if the user isn't you). Switching between windows is one of those things a user has a very definite expectation about. If you subvert that by doing magic things when you switch between this and that window then you might end up alienating the user. But, as Tim points out, system hooks are the way to go. TJG -- http://mail.python.org/mailman/listinfo/python-list
Re: How to detect when a user switches between windows (in WinXP)?
[EMAIL PROTECTED] wrote: I'm a beginning-to-intermediate Python programmer with some experience in other languages. At the moment I am trying to write a Python program that will run in the background and execute a series of commands whenever I switch between windows (my OS is Windows XP). For example, I want my program to do something when I switch to my Firefox browser, and then do something else when I switch to a certain sub- window in Photoshop (which has a certain title, and a certain photo associated with it), then do yet another thing when I switch to another sub-window (with a different title and photo) within Photoshop. The particular actions will be based on the window's title. I've already figured out how to retrieve that, using GetWindowText(GetForegroundWindow()) from the win32gui module. My question is, how can I detect when the user switches between windows? I haven't been able to figure that part out yet. Searching the group didn't give me any answers. The way you do this is to write a Windows hook. The WH_CBT hook intercepts WM_ACTIVATE and WM_DEACTIVATE calls system-wide. However, that requires injecting the hook DLL into every process with a Windows, and you certainly don't want to do that in Python. Write a minimal C DLL to be the hook, and have it send messages to your Python process. -- Tim Roberts, [EMAIL PROTECTED] Providenza Boekelheide, Inc. -- http://mail.python.org/mailman/listinfo/python-list
How to detect when a user switches between windows (in WinXP)?
Hi everyone, I'm a beginning-to-intermediate Python programmer with some experience in other languages. At the moment I am trying to write a Python program that will run in the background and execute a series of commands whenever I switch between windows (my OS is Windows XP). For example, I want my program to do something when I switch to my Firefox browser, and then do something else when I switch to a certain sub- window in Photoshop (which has a certain title, and a certain photo associated with it), then do yet another thing when I switch to another sub-window (with a different title and photo) within Photoshop. The particular actions will be based on the window's title. I've already figured out how to retrieve that, using GetWindowText(GetForegroundWindow()) from the win32gui module. My question is, how can I detect when the user switches between windows? I haven't been able to figure that part out yet. Searching the group didn't give me any answers. Your help is greatly appreciated. Thanks! Assaf. -- http://mail.python.org/mailman/listinfo/python-list
Re: How to detect when a user switches between windows (in WinXP)?
On Dec 25, 4:31 am, [EMAIL PROTECTED] wrote: Hi everyone, I'm a beginning-to-intermediate Python programmer with some experience in other languages. At the moment I am trying to write a Python program that will run in the background and execute a series of commands whenever I switch between windows (my OS is Windows XP). For example, I want my program to do something when I switch to my Firefox browser, and then do something else when I switch to a certain sub- window in Photoshop (which has a certain title, and a certain photo associated with it), then do yet another thing when I switch to another sub-window (with a different title and photo) within Photoshop. The particular actions will be based on the window's title. I've already figured out how to retrieve that, using GetWindowText(GetForegroundWindow()) from the win32gui module. My question is, how can I detect when the user switches between windows? I haven't been able to figure that part out yet. Searching the group didn't give me any answers. Your help is greatly appreciated. Thanks! Assaf. What you most likely want to do is run the win32gui call inside an infinite loop. Something along these lines: # untested code import time while True: winTitle = GetWindowText(GetForegroundWindow()) if winTitle == 'some string': # do something time.sleep(1) # nap for a second This will check once a second to see what window you have up. You'll probably want to set some kind of sentinel value when it does something to the current window so it doesn't repeatedly do that something each second. Thus, the if-then logic will need to be more complex, but this should get you going. HTH Mike -- http://mail.python.org/mailman/listinfo/python-list