スカイプのテキストボックスに文字列を表示させたいです。
スカイプのテキストボックスに文字列を表示させたいです。
スカイプのテキストボックスに文字列を表示させたいのですが、やり方がいまいちわかりません。
わけもわからず調べていると、結局こうなったのですが、エラーが無いですが、実効もないです。
#include <Windows.h>
int main()
{
HWND hWnd=0;
HWND hEdit = ::GetDlgItem(hWnd, 0x00010B88);
SendMessage(hEdit,WM_SETTEXT,0,(LPARAM)TEXT("ほげほげ"));
}
ハンドルはAutoItX3のinfoで調べました。
まったく訳がわかっていない状態です。
これから僕が調べた方がいいことなどのご指導をいただけたら嬉しいです。
よろしくお願いします。
わけもわからず調べていると、結局こうなったのですが、エラーが無いですが、実効もないです。
#include <Windows.h>
int main()
{
HWND hWnd=0;
HWND hEdit = ::GetDlgItem(hWnd, 0x00010B88);
SendMessage(hEdit,WM_SETTEXT,0,(LPARAM)TEXT("ほげほげ"));
}
ハンドルはAutoItX3のinfoで調べました。
まったく訳がわかっていない状態です。
これから僕が調べた方がいいことなどのご指導をいただけたら嬉しいです。
よろしくお願いします。
- bitter_fox
- 記事: 607
- 登録日時: 13年前
- 住所: 大阪府
Re: スカイプのテキストボックスに文字列を表示させたいです。
今の状態だと0という値で登録されたウィンドウから0x00010B88という識別子を持つアイテムを検索しています。おならちゃん。 さんが書きました:スカイプのテキストボックスに文字列を表示させたいのですが、やり方がいまいちわかりません。
わけもわからず調べていると、結局こうなったのですが、エラーが無いですが、実効もないです。ハンドルはAutoItX3のinfoで調べました。#include <Windows.h> int main() { HWND hWnd=0; HWND hEdit = ::GetDlgItem(hWnd, 0x00010B88); SendMessage(hEdit,WM_SETTEXT,0,(LPARAM)TEXT("ほげほげ")); }
まったく訳がわかっていない状態です。
これから僕が調べた方がいいことなどのご指導をいただけたら嬉しいです。
よろしくお願いします。
スカイプのウィンドウは果たして0で登録されているでしょうか?
一般的に考えたらそうではないでしょう。
FindWindow関数を使ってスカイプのウィンドウがどういう値で登録されているのかを調べてそれをもとにGetDldItem関数を使ってみてください。
http://msdn.microsoft.com/ja-jp/library/cc364634.aspx
それからソースコードを載せる際はcodeタグを使用してください。
詳しくはフォーラムルールをお読みください。
[hr][追記]
こちらも参考にしてください。
http://eternalwindows.jp/winbase/window/window15.html
Re: スカイプのテキストボックスに文字列を表示させたいです。
有料ですが Spy++ を使えば Skypeのダイアログの持っているウィンドウIDを調べることができます。
Re: スカイプのテキストボックスに文字列を表示させたいです。
bitter foxさん 早速のお返事ありがとう御座いました。
まず、フォーラムルールのことについて教えていただきありがとう御座います!
それと、で囲むのですね!すみませんでした。
有力なURLをありがとう御座います。
1. 自分は今何がしたくて
スカイプへ文字列を送るプログラムを作りたいです。
2. どう取り組んで(作ったプログラムはどれで
サイトで調べましたが難しくて出来ませんでした。
3. どのようなエラーやトラブルで困っていて
まだ、出来ていません。
4. 自分は何が解らないのか、知りたいのか
ほとんど全てです。どのように送ればいいのかが全てわかっていません。
(まだ追記で張ってくださったURLはちょこっとしかみていないので、これから見て学ぼうと思っています。)
5. 今のCの知識はどの程度なのか
C言語が書けるくらいですが、APIは無知です。
naohiro19さん
ご回答ありがとう御座いました。初めて知りました!。しかし、スカイプ以外となったときに学んでおかないと応用が利かないとおもいましたので今回は自分で作って行きたいと思います。
まず、フォーラムルールのことについて教えていただきありがとう御座います!
それと、で囲むのですね!すみませんでした。
有力なURLをありがとう御座います。
1. 自分は今何がしたくて
スカイプへ文字列を送るプログラムを作りたいです。
2. どう取り組んで(作ったプログラムはどれで
サイトで調べましたが難しくて出来ませんでした。
3. どのようなエラーやトラブルで困っていて
まだ、出来ていません。
4. 自分は何が解らないのか、知りたいのか
ほとんど全てです。どのように送ればいいのかが全てわかっていません。
(まだ追記で張ってくださったURLはちょこっとしかみていないので、これから見て学ぼうと思っています。)
5. 今のCの知識はどの程度なのか
C言語が書けるくらいですが、APIは無知です。
naohiro19さん
ご回答ありがとう御座いました。初めて知りました!。しかし、スカイプ以外となったときに学んでおかないと応用が利かないとおもいましたので今回は自分で作って行きたいと思います。
Re: スカイプのテキストボックスに文字列を表示させたいです。
Spy++はスカイプ以外のウインドウの情報なども調べられます。
参考:http://www.atmarkit.co.jp/fdotnet/dotne ... edspy.html
参考:http://www.atmarkit.co.jp/fdotnet/dotne ... edspy.html
Re: スカイプのテキストボックスに文字列を表示させたいです。
beatle さん ご回答ありがとうございます!便利そうですね@w@ですが、AutoItX3Infoでやらせてください。
それとも、Spy++じゃないと出来ないのでしょうか?
<質問です。よろしくお願いします。>
プログラムを実行させるとそのwindowがあるかを探してあったらタスクバーの中のスカイプが消えてくれるサンプルプログラムを改造して、windowの中のテキストボックスがあったらスカイプが消えてくれるプログラムをまず作ろうと思いました。しかし、
このプログラムを実行させてもタスクバーの中のスカイプが消えてくれません。サンプルプログラムではskypeが消えました。
ということは、GetDlgItemが間違っているということなのでしょうが、
http://msdn.microsoft.com/ja-jp/library/cc364621.aspx
ハンドルを取得したいコントロールの識別子を指定します。の部分が間違っているきがするのですが、何を入れればいいのでしょうか?
AutoItinfoで調べるとwindow handleとcontrol handleがでてくるので、両方hwndTarget,の後ろに書きましたができませんでした。AutoItinfoではこれだけの情報が出てくるのですが、足りていないのでしょうか?
ご回答宜しくお願い致します。
<AutoItX3infoででてくる情報>
>>>> Window <<<<
Title: Skype™ - ********
Class: tSkMainForm.UnicodeClass
Position: 480, 0
Size: 800, 570
Style: 0x160F0000
ExStyle: 0x00050100
Handle: 0x0001076E
>>>> Control <<<<
Class: TChatRichEdit.UnicodeClass
Instance: 7
ClassnameNN: TChatRichEdit.UnicodeClass7
Name:
Advanced (Class): [CLASS:TChatRichEdit.UnicodeClass; INSTANCE:7]
ID: 461932
Text:
Position: 282, 497
Size: 401, 32
ControlClick Coords: 22, 22
Style: 0x54010044
ExStyle: 0x00000000
Handle: 0x00070C6C
>>>> Mouse <<<<
Position: 785, 545
Cursor ID: 0
Color: 0xFFFFFF
>>>> StatusBar <<<<
>>>> ToolsBar <<<<
>>>> Visible Text <<<<
>>>> Hidden Text <<<<
<実行に失敗したプログラム>
それとも、Spy++じゃないと出来ないのでしょうか?
<質問です。よろしくお願いします。>
プログラムを実行させるとそのwindowがあるかを探してあったらタスクバーの中のスカイプが消えてくれるサンプルプログラムを改造して、windowの中のテキストボックスがあったらスカイプが消えてくれるプログラムをまず作ろうと思いました。しかし、
このプログラムを実行させてもタスクバーの中のスカイプが消えてくれません。サンプルプログラムではskypeが消えました。
ということは、GetDlgItemが間違っているということなのでしょうが、
http://msdn.microsoft.com/ja-jp/library/cc364621.aspx
ハンドルを取得したいコントロールの識別子を指定します。の部分が間違っているきがするのですが、何を入れればいいのでしょうか?
AutoItinfoで調べるとwindow handleとcontrol handleがでてくるので、両方hwndTarget,の後ろに書きましたができませんでした。AutoItinfoではこれだけの情報が出てくるのですが、足りていないのでしょうか?
ご回答宜しくお願い致します。
<AutoItX3infoででてくる情報>
>>>> Window <<<<
Title: Skype™ - ********
Class: tSkMainForm.UnicodeClass
Position: 480, 0
Size: 800, 570
Style: 0x160F0000
ExStyle: 0x00050100
Handle: 0x0001076E
>>>> Control <<<<
Class: TChatRichEdit.UnicodeClass
Instance: 7
ClassnameNN: TChatRichEdit.UnicodeClass7
Name:
Advanced (Class): [CLASS:TChatRichEdit.UnicodeClass; INSTANCE:7]
ID: 461932
Text:
Position: 282, 497
Size: 401, 32
ControlClick Coords: 22, 22
Style: 0x54010044
ExStyle: 0x00000000
Handle: 0x00070C6C
>>>> Mouse <<<<
Position: 785, 545
Cursor ID: 0
Color: 0xFFFFFF
>>>> StatusBar <<<<
>>>> ToolsBar <<<<
>>>> Visible Text <<<<
>>>> Hidden Text <<<<
<実行に失敗したプログラム>
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: スカイプのテキストボックスに文字列を表示させたいです。
「Vector: FinderSystem - 新着ソフトレビュー」
http://www.vector.co.jp/magazine/softne ... 04201.html
ウィンドウ名ならこれが使えるのでは?
http://www.vector.co.jp/magazine/softne ... 04201.html
ウィンドウ名ならこれが使えるのでは?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: スカイプのテキストボックスに文字列を表示させたいです。
softyaさん ご回答ありがとうございます。しかし、ダウンロードすることは出来ませんでした。
こちらを勧めてくださるということはAutoItX3infoでは情報が不十分だということでしょうか?
こちらを勧めてくださるということはAutoItX3infoでは情報が不十分だということでしょうか?
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: スカイプのテキストボックスに文字列を表示させたいです。
こっちが使いやすかなと思っただけです。すいません公開停止してますね。失礼しました。
ともかく他にも方法があるって事を言いたかっただけです。
ともかく他にも方法があるって事を言いたかっただけです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: スカイプのテキストボックスに文字列を表示させたいです。
コントロールIDがころころ変わってますけど一定ではないのでしょうか?
一定でないのであればGetDlgItemじゃなくてFindWindowExを使う必要があるのでは。
一定でないのであればGetDlgItemじゃなくてFindWindowExを使う必要があるのでは。
Re: スカイプのテキストボックスに文字列を表示させたいです。
softyaさん ありがとう御座いました。いろんな見るやつがあるということですね!
ISLeさん ご回答ありがとう御座いました。
言われてみて、「おっ?」っと思い調べてみたところ換わっていました。
なので教えてくださった関数を使い書き換えてみました。が、どうしてもうまくいきません。
しかし、一つ出来るようになったことがあります。それは、notepadになら出力が可能になりました。
しかし不思議なことがありました。それは最初に.txtの中に文字があると上書きされています。ですが.txtを閉じると、
「内容が変更されています保存しますか?」が出ることも無く消えていて、もう一度.txtを開いてみると、プログラムで出力した文字が消えていて、もともとあった文字列が表示されます。
文字はその場所に送られているが、書かれているわけがないということでしょうか?
しかし、上書き保存を押してみると保存されていました。
<skypeに文字列を出力できない>
<notepadに文字列を出力できる>
なぜスカイプには文字列を出力することが出来ないのでしょうか?そして、どのようにすれば文字列を出力することが出来るようになるのでしょうか?ご回答よろしくお願いします。
ISLeさん ご回答ありがとう御座いました。
言われてみて、「おっ?」っと思い調べてみたところ換わっていました。
なので教えてくださった関数を使い書き換えてみました。が、どうしてもうまくいきません。
しかし、一つ出来るようになったことがあります。それは、notepadになら出力が可能になりました。
しかし不思議なことがありました。それは最初に.txtの中に文字があると上書きされています。ですが.txtを閉じると、
「内容が変更されています保存しますか?」が出ることも無く消えていて、もう一度.txtを開いてみると、プログラムで出力した文字が消えていて、もともとあった文字列が表示されます。
文字はその場所に送られているが、書かれているわけがないということでしょうか?
しかし、上書き保存を押してみると保存されていました。
<skypeに文字列を出力できない>
#include <Windows.h>
int main()
{
HWND hwndTarget;
hwndTarget=FindWindow(TEXT("tSkMainForm.UnicodeClass"),NULL);
hwndTarget = FindWindowEx(hwndTarget, 0, "TChatRichEdit.UnicodeClass", 0);
SendMessage(hwndTarget, WM_SETTEXT, 0, (LPARAM)("処理終了です!"));
}
Re: スカイプのテキストボックスに文字列を表示させたいです。
softyaさん ありがとう御座いました。いろんな見るやつがあるということですね!
ISLeさん ご回答ありがとう御座いました。
言われてみて、「おっ?」っと思い調べてみたところ換わっていました。
なので教えてくださった関数を使い書き換えてみました。が、どうしてもうまくいきません。
しかし、一つ出来るようになったことがあります。それは、notepadになら出力が可能になりました。
しかし不思議なことがありました。それは最初に.txtの中に文字があると上書きされています。ですが.txtを閉じると、
「内容が変更されています保存しますか?」が出ることも無く消えていて、もう一度.txtを開いてみると、プログラムで出力した文字が消えていて、もともとあった文字列が表示されます。
文字はその場所に送られているが、書かれているわけがないということでしょうか?
しかし、上書き保存を押してみると保存されていました。
<skypeに文字列を出力できない>
<notepadに文字列を出力できる>
なぜスカイプには文字列を出力することが出来ないのでしょうか?そして、どのようにすれば文字列を出力することが出来るようになるのでしょうか?ご回答よろしくお願いします。
ISLeさん ご回答ありがとう御座いました。
言われてみて、「おっ?」っと思い調べてみたところ換わっていました。
なので教えてくださった関数を使い書き換えてみました。が、どうしてもうまくいきません。
しかし、一つ出来るようになったことがあります。それは、notepadになら出力が可能になりました。
しかし不思議なことがありました。それは最初に.txtの中に文字があると上書きされています。ですが.txtを閉じると、
「内容が変更されています保存しますか?」が出ることも無く消えていて、もう一度.txtを開いてみると、プログラムで出力した文字が消えていて、もともとあった文字列が表示されます。
文字はその場所に送られているが、書かれているわけがないということでしょうか?
しかし、上書き保存を押してみると保存されていました。
<skypeに文字列を出力できない>
#include <Windows.h>
int main()
{
HWND hwndTarget;
hwndTarget=FindWindow(TEXT("tSkMainForm.UnicodeClass"),NULL);
hwndTarget = FindWindowEx(hwndTarget, 0, "TChatRichEdit.UnicodeClass", 0);
SendMessage(hwndTarget, WM_SETTEXT, 0, (LPARAM)("処理終了です!"));
}
- bitter_fox
- 記事: 607
- 登録日時: 13年前
- 住所: 大阪府
Re: スカイプのテキストボックスに文字列を表示させたいです。
内容が変更されているかの判断をテキストボックス内のデータとファイルのデータの比較で行っていないのでしょう。おならちゃん。 さんが書きました: しかし、一つ出来るようになったことがあります。それは、notepadになら出力が可能になりました。
しかし不思議なことがありました。それは最初に.txtの中に文字があると上書きされています。ですが.txtを閉じると、
「内容が変更されています保存しますか?」が出ることも無く消えていて、もう一度.txtを開いてみると、プログラムで出力した文字が消えていて、もともとあった文字列が表示されます。
文字はその場所に送られているが、書かれているわけがないということでしょうか?
しかし、上書き保存を押してみると保存されていました。
恐らくですが、「元に戻す」も有効になってないのではないかと思います。
つまりこれはノートパッド内部のデータは何ら変わってないということになります。
まず確認するのはFindWindow(TEXT("tSkMainForm.UnicodeClass"),NULL)が成功しているかを確認してください。おならちゃん。 さんが書きました: <skypeに文字列を出力できない> なぜスカイプには文字列を出力することが出来ないのでしょうか?そして、どのようにすれば文字列を出力することが出来るようになるのでしょうか?ご回答よろしくお願いします。
確認するのはprintf("%p\n", hwndTarget)をFindWindowのあとに行ってください。
これで0を意味する値が出力されるならそもそものスカイプのウィンドウハンドルを取得できていません。
ちなみに手元のスカイプで実行すると00000000と出力されてしまい、正常に取得できていませんでした。
Re: スカイプのテキストボックスに文字列を表示させたいです。
bitter fox さん ご回答ありがとうござます^^!
notepadは比較もしていなければデータを書いてない、しかし、そこに文字は送られているけど上辺だけということですか?
上書き保存をすれば変わるのは、そこまで内部のデータが何も変わっていないということですか。なるほど・・・
確かに元に戻すはできませんでした。
FindWindow(TEXT("tSkMainForm.UnicodeClass"),NULL)は成功していましたが、
FindWindowEx(hwndTarget, 0, "TChatRichEdit.UnicodeClass", 0);
こちらを試したときに全部0でした。
notepadは比較もしていなければデータを書いてない、しかし、そこに文字は送られているけど上辺だけということですか?
上書き保存をすれば変わるのは、そこまで内部のデータが何も変わっていないということですか。なるほど・・・
確かに元に戻すはできませんでした。
FindWindow(TEXT("tSkMainForm.UnicodeClass"),NULL)は成功していましたが、
FindWindowEx(hwndTarget, 0, "TChatRichEdit.UnicodeClass", 0);
こちらを試したときに全部0でした。
- bitter_fox
- 記事: 607
- 登録日時: 13年前
- 住所: 大阪府
Re: スカイプのテキストボックスに文字列を表示させたいです。
そういう事ですね。目に見えてるところだけが変わったという事です。おならちゃん。 さんが書きました: notepadは比較もしていなければデータを書いてない、しかし、そこに文字は送られているけど上辺だけということですか?
上書き保存をすれば変わるのは、そこまで内部のデータが何も変わっていないということですか。なるほど・・・
確かに元に戻すはできませんでした。
内部でどう書かれてるのかわからないですが、テキストボックスをサブクラス化したときにキー入力を受け付けるメッセージだけしか処理してないんでしょうね。
ということは取得できてないですね。おならちゃん。 さんが書きました: FindWindow(TEXT("tSkMainForm.UnicodeClass"),NULL)は成功していましたが、
FindWindowEx(hwndTarget, 0, "TChatRichEdit.UnicodeClass", 0);
こちらを試したときに全部0でした。
TChatRichEdit.UnicodeClassが誤ってないかどうかを確認してください。
EnumWindowとGetClassNameあたりを使って総当たりで調べるというのも一つの手です。
http://msdn.microsoft.com/ja-jp/library/cc364600.aspx
Re: スカイプのテキストボックスに文字列を表示させたいです。
bitter fox さん ご回答ありがとう御座います。
EnumChildWindowsとGetClassNameを使ってみました。
そしたら結果はこうなりました。
といった感じになりました。配列のようにどこかを+1しなくても他のクラスを探してくれるのでしょうか?
見た感じ同じところを何回も調べてるように見えました。
僕の書いたプログラムが間違っているのでしょうかTT?
ご回答よろしくお願いします。
EnumChildWindowsとGetClassNameを使ってみました。
#include <Windows.h>
#include <tchar.h>
#include <stdio.h>
static BOOL CALLBACK FindSaveButton(
HWND hwnd,
LPARAM lParam
)
{
TCHAR tbuf[1024];
::GetClassName(hwnd,tbuf,sizeof(tbuf));
if(tbuf == 0){
printf("0になるかどうかを調べるためにつけました。\n");
return FALSE;
}
printf("%p\n",tbuf);
return TRUE;
}
int main()
{
HWND hwndTarget,hbtn=NULL;
hwndTarget=FindWindow(TEXT("tSkMainForm.UnicodeClass"),NULL);
printf("%p\n\n",hwndTarget);
EnumChildWindows(hwndTarget,FindSaveButton,(LPARAM) &hbtn);
SendMessage(hbtn, WM_SETTEXT, 0, (LPARAM)("処理終了です!"));
}
見た感じ同じところを何回も調べてるように見えました。
僕の書いたプログラムが間違っているのでしょうかTT?
ご回答よろしくお願いします。
Re: スカイプのテキストボックスに文字列を表示させたいです。
http://stackoverflow.com/questions/5714 ... the-winapi
↑こちらのページを参考にして、
以下のコードのように、
階層をたどれば、取得できると思います。
↑こちらのページを参考にして、
以下のコードのように、
階層をたどれば、取得できると思います。
#include <Windows.h>
int main()
{
HWND hwndTarget;
hwndTarget=FindWindow(TEXT("tSkMainForm.UnicodeClass"),NULL);
hwndTarget = FindWindowEx(hwndTarget, 0, "TConversationForm.UnicodeClass", 0);
hwndTarget = FindWindowEx(hwndTarget, 0, "TChatEntryControl.UnicodeClass", 0);
hwndTarget = FindWindowEx(hwndTarget, 0, "TChatRichEdit.UnicodeClass", 0);
SendMessage(hwndTarget, WM_SETTEXT, 0, (LPARAM)("処理終了です!"));
}