我想知道如何编写一个知道哪个Windows应用程序是焦点的Java程序.我可以打开很多窗口,但我想知道正在使用的那个窗口(就像我正在键入的那样,就像谷歌Chrome一样).
我不需要在窗口或应用程序中更改任何内容,只需要知道它的名称.
我在之前的一个帖子(/sf/ask/364464341/)上问了一个类似的问题,但我被引导使用JNI,而我我没有取得多大成功...我已经阅读了一些教程,虽然有些工作正常,但其他人却没有,我仍然无法获得我需要的信息,这是前景窗口的标题.
现在我正在研究JNA,但我无法弄清楚如何访问GetForegroundWindow()...我想我可以使用此代码(在另一个线程上找到)获取窗口句柄后打印文本:
import com.sun.jna.*;
import com.sun.jna.win32.*;
public class jnatest {
public interface User32 extends StdCallLibrary {
User32 INSTANCE = (User32) Native.loadLibrary("user32", User32.class);
int GetWindowTextA(PointerType hWnd, byte[] lpString, int nMaxCount);
}
public static void main(){
byte[] windowText = new byte[512];
PointerType hwnd = //GetForegroundWindow() (?)...
User32.INSTANCE.GetWindowTextA(hwnd, windowText, 512);
System.out.println(Native.toString(windowText));
}
}
Run Code Online (Sandbox Code Playgroud)
有什么建议?谢谢!
我一直在阅读有多大的差异列表,我希望从书中测试一些例子.但似乎你不能以与插入([1,2,3],[4,5],X)相同的方式传递列表作为输入,其中X = [1,2,3, 4,5].奇怪的是,我咨询过的任何一本书都没有提到这一点.
我在swipl上运行代码,我有兴趣测试差异追加谓词:
dapp(A-B,B-C,A-C).
Run Code Online (Sandbox Code Playgroud)
和"旋转列表的第一个元素"谓词:
drotate([H|T]-T1,R-S) :- dapp(T-T1,[H|L]-L,R-S).
Run Code Online (Sandbox Code Playgroud)
任何想法,我如何在swipl中测试这些谓词?