私はUNIXベースのシステムで動作するように書かれたC++プログラム(C#と思った)を持っていると思います。 X11コールが含まれています。 Windows XPでPC上で実行するようコンパイルする方法はありますか? 私はmingwをインストールしました。Windowsでx11を呼び出すC++プログラムをコンパイルする
SCIDチェスデータベースパッケージへの入力を許可するハードウェア(DreamCheeky usbチェス盤)を取得するために書かれた 'パッチ'プログラムです(Windows版にインストールされていますが、その開発は非常にunix/tcl/tkなど)
プログラムは以下の通りです。 それを書いた人は、Windows版を作成する時間があるかもしれません(または私は恐怖かもしれません) しかし、私はそれが私の窓のラップトップで動作するようにしようとする必死です。
//compile with g++ -o monitorcheeky monitorcheeky.c -L/usr/X11R6/lib -lX11
#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <X11/Xlib.h>
#include <X11/keysym.h>
#include <string.h>
#define KEY_DOWN True
#define KEY_UP False
#define KEYCODE_a 38
#define KEYCODE_b 56
#define KEYCODE_c 54
#define KEYCODE_d 40
#define KEYCODE_e 26
#define KEYCODE_f 41
#define KEYCODE_g 42
#define KEYCODE_h 43
#define KEYCODE_1 10
#define KEYCODE_2 11
#define KEYCODE_3 12
#define KEYCODE_4 13
#define KEYCODE_5 14
#define KEYCODE_6 15
#define KEYCODE_7 16
#define KEYCODE_8 17
#define KEYCODE_EQUALS 21
#define KEYCODE_Q 24
#define KEYCODE_R 27
#define KEYCODE_B 56
#define KEYCODE_N 57
#define KEYCODE_RTN 36
Display *dpy;
// Function to create a keyboard event
XKeyEvent createKeyEvent(Display *display, Window &win,
Window &winRoot, bool press,
int keycode, int modifiers)
{
XKeyEvent event;
event.display = display;
event.window = win;
event.root = winRoot;
event.subwindow = None;
event.time = CurrentTime;
event.x = 1;
event.y = 1;
event.x_root = 1;
event.y_root = 1;
event.same_screen = True;
event.keycode = keycode;
event.state = modifiers;
if(press)
event.type = KeyPress;
else
event.type = KeyRelease;
return event;
}
int sendKeyPress(Window winRoot, char letter, int revert) {
Window winFocus;
int keycode;
switch(letter)
{
case 'a':
keycode = KEYCODE_a;
break;
case 'b':
keycode = KEYCODE_b;
break;
case 'c':
keycode = KEYCODE_c;
break;
case 'd':
keycode = KEYCODE_d;
break;
case 'e':
keycode = KEYCODE_e;
break;
case 'f':
keycode = KEYCODE_f;
break;
case 'g':
keycode = KEYCODE_g;
break;
case 'h':
keycode = KEYCODE_h;
break;
case '1':
keycode = KEYCODE_1;
break;
case '2':
keycode = KEYCODE_2;
break;
case '3':
keycode = KEYCODE_3;
break;
case '4':
keycode = KEYCODE_4;
break;
case '5':
keycode = KEYCODE_5;
break;
case '6':
keycode = KEYCODE_6;
break;
case '7':
keycode = KEYCODE_7;
break;
case '8':
keycode = KEYCODE_8;
break;
default :
keycode = KEYCODE_RTN;
}
XGetInputFocus(dpy, &winFocus, &revert);
// Send a fake key press event to the window.
XKeyEvent event = createKeyEvent(dpy, winFocus, winRoot, KEY_DOWN, keycode, 0);
XSendEvent(event.display, event.window, True, KeyPressMask, (XEvent *)&event);
// Send a fake key release event to the window.
event = createKeyEvent(dpy, winFocus, winRoot, KEY_UP, keycode, 0);
XSendEvent(event.display, event.window, True, KeyPressMask, (XEvent *)&event);
XFlush(dpy);
return 0;
}
int main() {
int sockfd;
int len;
struct sockaddr_in address;
int result;
char input[5];
int revert;
/* init */
dpy = XOpenDisplay(NULL);
if (!dpy) return 1;
// Get the root window for the current display.
Window winRoot = XDefaultRootWindow(dpy);
sockfd = socket(AF_INET, SOCK_STREAM, 0);
address.sin_family = AF_INET;
address.sin_addr.s_addr = inet_addr("127.0.0.1");
address.sin_port = htons(8796);
len = sizeof(address);
result = connect(sockfd, (struct sockaddr *)&address, len);
if (result == -1) {
perror("oops: client1");
return 1;
}
while (1) {
read(sockfd, input ,5);
// printf("%s",input);
// fflush(stdin);
sendKeyPress(winRoot, input[0], revert);
sendKeyPress(winRoot, input[1], revert);
sendKeyPress(winRoot, input[2], revert);
sendKeyPress(winRoot, input[3], revert);
}
/* cleanup */
XCloseDisplay(dpy);
return 0;
}
のthnxすべて
ジェリージェリー
X11の呼び出しにはどのような機能がありますか? –
もっと謝罪します!あなたのコメントTimへの返信を投稿する方法が不明です。コメントの追加オプションでは、500文字しか使用できず、フォーマットが明確にできません。 – JerryK
元の投稿を編集してソースコードを追加してください – Simon