我正在C#中编写 Alt + Tab 替换,并且在全屏应用程序中遇到问题。
有没有办法检测 import sqlite3
conn = sqlite3.connect('emaildb2.sqlite')
cur = conn.cursor()
cur.execute('''
DROP TABLE IF EXISTS Counts''')
cur.execute('''
CREATE TABLE Counts (org TEXT, count INTEGER)''')
fname = input('Enter file name: ')
if (len(fname) < 1): fname = 'mbox.txt'
fh = open(fname)
list_1 =[]
for line in fh:
if not line.startswith('From: '): continue
pieces = line.split()
email = pieces[1]
dom = email.find('@')
org = email[dom+1:len(email)]
cur.execute('SELECT count FROM Counts WHERE org = ? ', (org,))
row = cur.fetchone()
if row is None:
cur.execute('''INSERT INTO Counts (org, count)
VALUES (?, 1)''', (org,))
else:
cur.execute('UPDATE Counts SET count = count + 1 WHERE org = ?',
(org,))
conn.commit()
# https://www.sqlite.org/lang_select.html
sqlstr = 'SELECT org, count FROM Counts ORDER BY count DESC LIMIT 10'
for row in cur.execute(sqlstr):
print(str(row[0]), row[1])
cur.close()
来电是否会改变屏幕分辨率?或者等效地,如果SetForegroundWindow(hWnd)
是全屏应用程序?我想等到决议更改完成,或者如果没有变化,立即进行。
屏幕分辨率更改是异步完成的,函数调用在它发生之前就会很好地返回,所以我的代码过早运行,并将我的应用程序绘制到全屏应用程序的表面上,尺寸错误,然后在分辨率更改后,它看起来特别难看。
如果有人有兴趣,我的申请来源是https://bitbucket.org/FrigoCoder/frigotab/src。
为了澄清,我更感兴趣的是事先知道是否发生分辨率变化而不是稍后检测。我已经知道了一个半解决方案,我在hWnd
或其他窗口呼叫SetForegroundWindow()
并观看GetDesktopWindow()
和SystemEvents.DisplaySettingsChanging
。但是,如果发生分辨率更改,这只会给我一个迟到的异步通知,而不会告诉我它是否会发生。
答案 0 :(得分:2)
我设法解决了这个问题。我只是向前台应用程序发送一个失活消息,而不是尝试检测全屏应用程序,这会触发早期的分辨率更改:
SendMessage(GetForegroundWindow(), WM_ACTIVATEAPP, false, GetCurrentThreadId());
这个完全相同的消息也在应用程序切换期间发送,所以我基本上在实际发生之前模拟一个消息。我还没有遇到任何副作用。
但请注意,这确实不解决了DWM问题。 Windows 7会自动禁用DWM组合以启动兼容性,或者当它检测到对主显示表面的直接访问时。它不允许您重新启用,我看不到这个问题的简单解决方案。值得庆幸的是,由于在Windows 8及更高版本中始终启用DWM组合,因此该问题最终会消失。
答案 1 :(得分:0)
也许Winforms事件SizeChanged可以帮助您。
您可以将此事件用作其余代码的继续排序。如果由于没有调整大小而事件没有触发,则可以在指定的超时后运行辅助延续。它并不完美,但可能满足您的需求。