Win32API質問箱 Build ..
773:デフォルトの名無しさん
07/04/13 18:36:47
Mですから
774:デフォルトの名無しさん
07/04/13 18:42:44
>>768
ビル・G
数種類の奇妙な文字で文章を書く、親愛なる日本人の皆さん。
私はアルファベット26文字で美しい詩的な文章を綴り、人々を感嘆させるビル・Gである。
ユニコードとは何か。簡単に言えば、あらゆるプラットフォームで様々な言語を共通に扱えるようにするための統一的なコード体系のことだ。
もっと簡単に言おう。アルファベット以外の野蛮な絵文字を使ってコミュニケートする第三世界の人間に対する、心からの配慮だ。
今までも手を焼いてきた。2バイトコードの各国語対応も、少しは楽になるのだけどね。
君たちの国でも、ユニコードの問題が盛んに議論されているようだね。
日本や中国や台湾で使っている漢字コードやフォント違うって?
それは君たちが今までに勝手な文字を作りすぎてきたツケに過ぎないよ。
また、『固有の文化』という言葉で語られる微妙な差異に関する議論は、
私にはちょうど「靴下は右足から履かなければならない」
「いや、左足から履くのが伝統だ」と言い争いをしているようにしか聞こえない。そんなことはどうでもいいじゃないか!
775:デフォルトの名無しさん
07/04/13 18:54:31
拘りすぎてバカを見るのが東洋人
大雑把過ぎてバカを見るのが欧米人
776:デフォルトの名無しさん
07/04/13 19:25:50
CJK以外にもBidiとか言語タグとか対応するのが
遅かったねぇ。
BMPを16bitじゃなくて32bitにしてれば、もう少し問題先送りできたのに。
あとはユニコードまでも取り込んだGB18030とかどうするんだろうっていう。。。
777:デフォルトの名無しさん
07/04/13 19:31:01
XP以降のメモ帳で右から左に読むにして
Hello, World打つだけでも軽く死ねるなw
778:デフォルトの名無しさん
07/04/13 20:22:24
神の罰です
779:デフォルトの名無しさん
07/04/13 21:24:16
>>748
ナノ秒
冗談じゃなくて素直に考えて
780:デフォルトの名無しさん
07/04/13 21:26:31
>>768
ファイル名の制限という観点ではコードユニットの数で数えるから関係ない
781:デフォルトの名無しさん
07/04/13 21:31:48
ウニコードはうまそうだ
782:デフォルトの名無しさん
07/04/13 21:42:17
>>780
NTFSはどのエンコーディングを使ってんの?
783:デフォルトの名無しさん
07/04/13 21:54:10
>>780
ドキュメント上の問題のことです。
n文字という表現では最大バイト数は判りにくい。
784:デフォルトの名無しさん
07/04/13 21:54:42
>>782
おそらくUTF-16
785:デフォルトの名無しさん
07/04/13 21:55:22
もちろんUTF-16LE
786:デフォルトの名無しさん
07/04/13 23:01:50
結局、MAX_PATHの単位はなんなんだ?
明らかにバイト数じゃない
文字数も数えてみたがなんかちがう
会社によって1バイトのズレも許さないからこのあいまいな仕様がかなりムカつく
ちなみにファイルダイアログの最長はXPSP1までは0xFFFFだったがXPSP2からはどこまではいるのかよくわからん
ドラッグアンドドロップの限界は一体どこなんだ?
787:デフォルトの名無しさん
07/04/13 23:18:44
WinNTのNTFSドライバのパス名制限が (2^15-1) UTF-16符号単位だったと思うが
788:751
07/04/13 23:29:46
>>759
もちろん、\\.\〜の長いファイル名前をCreateFileで作成し、
動作を確認しています。
しかしながら、エクスプローラも捕らえられないファイル名は実用的か?
それともMAX_PATH以上32767文字以下で、もっともらしい定数があり、
自分が知らないだけかわからんとです。
789:デフォルトの名無しさん
07/04/13 23:44:40
GUIアプリでコンソールを表示するにはどうすればいいのでしょうか?
やりたいことは、
・起動した時にはコンソールアプリのように振る舞う。
・ある入力があった時点でウィンドウを表示し、GUIアプリとして振舞う
main()で起動するとコンソールは出ますが、WinMain()の第一引数で取得できる
HINSTANCEが取得できないので、GUIアプリとして振舞えない。
WinMain()で起動するとGUIは出せるが、コンソールへ出力を行えない。
WinMain()でGUIアプリとして起動しておいて、必要に応じて(何らかの関数呼び出しによって)
コンソールを表示させるのが正しいやり方なのかと思っていますが、調べてもやり方が見つかりません。
どなたかお助けを・・・
790:デフォルトの名無しさん
07/04/13 23:49:13
>>789
HINSTANCE == GetModule(0) だったハズ。
791:デフォルトの名無しさん
07/04/13 23:51:05
コンソール部分は別にしてCreateProcessは?
792:791
07/04/13 23:51:06
あ、すまん間違えた。
×:GetModule
○:GetModuleHandle
793:792
07/04/13 23:52:04
>>792==>>790!=>>791
もう寝る!
794:デフォルトの名無しさん
07/04/13 23:54:36
>>789
CreateProcess, GetStdHandle, SetStdHandle, CreatePipeでリダイレクト。
795:デフォルトの名無しさん
07/04/13 23:54:38
AllocConsole stdout
796:デフォルトの名無しさん
07/04/13 23:56:39
コンソール プロセスを生成して標準ハンドルをリダイレクトする方法
URLリンク(support.microsoft.com)
797:デフォルトの名無しさん
07/04/14 00:00:43
>>789
WinMainから始まるプログラムにAllocConsoleを使う方法も出ているが、
個人的には、手間要らずにC stdioやC++ iostreamを使えるので、
mainから始まるプログラムにした方がいいと思う。
EXEのインスタンスハンドルは791のとおりGetModuleHandleで。
798:デフォルトの名無しさん
07/04/14 00:31:27
>>777
前からおもってたのだが、右から左に読む文化圏に対応してるなら、
上から下に読む文化圏にも対応してていいんじゃないかと思ったりするのだがまぁいいや。
そういえば、昔、Macのことえりだったか縦書きIME変換やってくれてた記憶があったな〜
799:デフォルトの名無しさん
07/04/14 00:44:47
MS-IMEも、Wordなんかで縦書きにすればそれにあわせてくれる。
800:デフォルトの名無しさん
07/04/14 06:13:01
質問です。GetProcAddressを使ってDLL内の関数を呼び出したいのですが、
上手くいきません。プログラムを実行すると、そのまま強制終了してしまいます。
FARPROC SetHook,ResetHook;
SetHook = GetProcAddress(LoadLibrary(TEXT("hook.dll")),TEXT("_SetHook"));
ResetHook = GetProcAddress(LoadLibrary(TEXT("hook.dll")),TEXT("_ResetHook"));
として関数のアドレスを取得しています。各関数のアドレスは
SetHook : 011412A0
ResetHook : 011412D4
でした。tdump.exeでは
Exports from hook.dll
3 exported name(s), 3 export addresse(s). Ordinal base is 1.
Sorted by Name:
RVA Ord. Hint Name
-------- ---- ---- ----
000012D4 1 0000 _ResetHook
000012A0 2 0001 _SetHook
00009158 3 0002 ___CPPdebugHook
という結果が得られました。
GetProcAddressの使い方が間違っているのでしょうか?
コンパイラの設定に問題があるのでしょうか?
どのあたりに原因があるのか指摘して下さい。お願いします。<(_ _)>
コンパイラはBCCです。BCC Developerでビルドしています。
801:デフォルトの名無しさん
07/04/14 06:20:21
GetProcAddress の第2引数は LPCSTR だが。
802:800
07/04/14 06:38:04
>>801
SetHook = GetProcAddress(LoadLibrary(TEXT("hook.dll")),"_SetHook");
ResetHook = GetProcAddress(LoadLibrary(TEXT("hook.dll")),"_ResetHook");
としたのですが、上手くいきません。関数名の指定が間違っているのでしょうか?
803:デフォルトの名無しさん
07/04/14 06:46:26
>>800
まずは「強制終了」する場所を探らないと。
その情報だけじゃ、GetProcAddress() 絡みの問題かどうかなんてわ
からん。
804:800
07/04/14 06:57:58
>>803
関数の呼び出し時に強制終了します。
インポートライブラリを通しての呼び出しには成功したのですが。
805:デフォルトの名無しさん
07/04/14 07:02:09
それはGetProcの問題じゃないだろうな
FARPROCの宣言はどうなってる?
806:デフォルトの名無しさん
07/04/14 07:07:26
>>804
インポートライブラリを通しての呼び出しには成功ってんだったら
GetProcAddressで失敗なんじゃなくて
それで取った情報を使う時の失敗だろ
どうやって関数呼び出してんのか見せてみぃや
807:デフォルトの名無しさん
07/04/14 07:12:39
>>805
VCだと「typedef int (*FARPROC)(void)」だが、BCCはどうなんだろう・・・
ていうかそのまんま使ったら普通コンパイルとおらないかも?
808:デフォルトの名無しさん
07/04/14 07:16:41
呼び出し規約が間違っている。それでスタック壊れているんだろ。
809:デフォルトの名無しさん
07/04/14 07:18:09
普通目的の関数に合致した関数ポインタの型を定義してそれで使うもんじゃね?
ただのFARPROCにぶち込んでるヤツ初めて見た
810:800
07/04/14 07:39:35
>>805-809 レスありがとうございます。
#define EXPORT __declspec (dllexport)
typedef EXPORT HHOOK (*SETHOOK)(const HWND hCaller);
typedef EXPORT void (*RESETHOOK)(void);
SETHOOK SetHook;
RESETHOOK ResetHook;
と関数ポインタの型を定義してから
SetHook(hWnd);
ResetHook();
という感じで呼び出してみたのですが、やはり上手くいきません。
811:デフォルトの名無しさん
07/04/14 08:02:06
もう一度レスを見直すんだ。そこに答えがある。
812:デフォルトの名無しさん
07/04/14 08:17:26
VC2005でstrlen等を使うと
813:800
07/04/14 08:17:48
>>811
呼び出し規約の整合性に問題があるのでしょうか?
もう少し詳しく教えて頂けないでしょうか?
814:デフォルトの名無しさん
07/04/14 08:34:30
提供する側では__declspec (dllexport)が必要だろうが
使う側では要らないだろ。
提供する側でも使う側でも__stdcallとかを指定したほうが安全。
デフォルトに任せれば同じになっている可能性が高いけど
不一致になる危険性がある。
GetProcAddressじゃなくて暗黙のリンクでもいえることだけどね。
GetProcAddressの戻り値が0ってことはないよね。
815:デフォルトの名無しさん
07/04/14 08:56:00
>>810
DLL側のソースでその2つの関数がどう定義されているかもチェック
816:デフォルトの名無しさん
07/04/14 08:57:17
うまくいかないのと直接の関連はないが、
一々LeadLibraryするな。
1回ロードしたら、そのハンドルを使いまわせ。
817:デフォルトの名無しさん
07/04/14 08:58:36
LeadLibrary
818:デフォルトの名無しさん
07/04/14 09:01:36
一度だけLoadLibraryして、そのハンドルを保持して使うってのもそうだけど
GetProcAddressに直接ぶち込むのもどうかと
誤動作の原因になる可能性は充分にあるかと
819:デフォルトの名無しさん
07/04/14 09:06:34
誤動作するとは思えないが、直接GetProcAddressに渡していたら、
FreeLibraryするのに不便だろう。
GetModuleHandleで後から解放用にハンドルを得るなんて無茶も甚だしい。
820:デフォルトの名無しさん
07/04/14 09:08:22
誤動作するとは思えないって思うのが危ないな
常に誤動作するかも知れないと思ってコーディングすべし
821:デフォルトの名無しさん
07/04/14 09:09:01
>>787
UNICODE_STRINGの構造上の問題だな
同様の理由でNT系はコマンドラインの長さにも32767文字(UTF-16符号単位)制限がある
驚くべきことにWin9xだとコマンドライン長が1MB超えても大丈夫。
822:800
07/04/14 09:09:21
>>814-819 レスありがとうございます。
DLLの関数を
#define EXPORT __declspec (dllexport)
EXPORT HHOOK WINAPI SetHook(const HWND hCaller);
EXPORT void WINAPI ResetHook(void);
とし、関数を呼び出すプログラムで
typedef HHOOK WINAPI (*SETHOOK)(const HWND hCaller);
typedef void WINAPI (*RESETHOOK)(void);
SETHOOK SetHook;
RESETHOOK ResetHook;
HMODULE hook_lib;
hook_lib = LoadLibrary("hook.dll");
SetHook = GetProcAddress(hook_lib,"SetHook");
ResetHook = GetProcAddress(hook_lib,"ResetHook");
として関数を呼び出したのですが、やはり駄目です。GetProcAddressの戻り値を
再度確認したのですが、0ではありませんでした。
823:デフォルトの名無しさん
07/04/14 09:10:20
32767文字を超えるコマンドライン自体普通無いだろ・・・
824:デフォルトの名無しさん
07/04/14 09:12:32
typedefのWINAPI要らなくね?
825:デフォルトの名無しさん
07/04/14 09:18:50
>>822
あんまり関係ないけどGetProcAddressの戻り値ってキャストしなくてもコンパイル通るのか?
826:デフォルトの名無しさん
07/04/14 09:58:58
関数ポインタの宣言なんだが・・・
typedef HHOOK (WINAPI *SETHOOK)(const HWND);
typedef void (WINAPI *RESETHOOK)(void);
じゃねーの?WINAPIの位置が違うとか。
>>825
警告が出るだけだったような。
827:デフォルトの名無しさん
07/04/14 10:03:42
呼び出し規約の記述位置は括弧の中だね。
戻り値に付属なわけじゃなくて、
関数に付属する情報だからなんだろうけど、
最初は戸惑うよね。
828:デフォルトの名無しさん
07/04/14 10:07:09
Borlandの昔のコンパイラだと微妙に仕様が違ったり
標準キーワードじゃないから仕方ないけど
829:デフォルトの名無しさん
07/04/14 10:14:48
なんでだろうね?
間違って古いDLLが残っているとか。
830:デフォルトの名無しさん
07/04/14 10:18:02
DLL側と呼び出し側のソースをまとめてうpってもらった方が話が早くていいかもしらんな
831:デフォルトの名無しさん
07/04/14 10:20:56
VCの場合、
#define EXPORT __declspec(dllexport)
EXPORT HHOOK WINAPI __stdcall SetHook(const HWND hCaller);
EXPORT void WINAPI __stdcall ResetHook(void);
こうじゃないかな。__stdcallはなくても動きそうな気がするけれど
832:デフォルトの名無しさん
07/04/14 10:27:28
>>831
WINAPIは
#define WINAPI __stdcall
とかされてるだけだから、どっちかだけで十分
833:800
07/04/14 10:33:36
>>824-832 レスありがとうございます。
typedef HHOOK (WINAPI *SETHOOK)(const HWND hCaller);
typedef void (WINAPI *RESETHOOK)(void);
SETHOOK SetHook;
RESETHOOK ResetHook;
HMODULE hook_lib;
hook_lib = LoadLibrary("hook.dll");
SetHook = (SETHOOK)GetProcAddress(hook_lib,"SetHook");
ResetHook = (RESETHOOK)GetProcAddress(hook_lib,"ResetHook");
としたのですが駄目でした。VCのExpress Editionで上手くいくかどうか試してみます。
834:デフォルトの名無しさん
07/04/14 10:38:30
>typedef HHOOK (WINAPI *SETHOOK)(const HWND hCaller);
今思った
引数は型だけで名前はイラネ
835:デフォルトの名無しさん
07/04/14 10:40:22
>>800
Borlandデバッグ環境は知らんが、DLL側のSetHook()の入り口にブレークポイント仕掛けるなり、MessageBox()
出すなりして、そこまで来ているか(強制終了がどの段階で起きているか)確認しろ。
関数名から何がやりたいか想像はつくが、もう少し経験をつんでからやることを強く勧める。
836:デフォルトの名無しさん
07/04/14 10:42:32
つーか無理にLoadLibraryでやらんでもいいことだけどな
837:デフォルトの名無しさん
07/04/14 10:47:16
そりゃまあごもっともです
838:デフォルトの名無しさん
07/04/14 10:48:32
>>800
>>インポートライブラリを通しての呼び出しには成功したのですが。
が本当なら、そのヘッダーファイルでの関数プロトタイプ宣言(は正しいはずだからこれ)にあわせろ。
おれもお前には、Hookは10年早いと思う。
839:800
07/04/14 12:15:58
>>834-838 レスありがとうございます。
マウスフックを使ったプログラムを作成しています。システムフックにより
他のウィンドウのタイトルを変更することには成功しました。そのため、
フックの処理自体には問題が無いと考えているのですが。
VCで実行してみたのですが、SetHook内で処理が中断しました。
インポートライブラリを使用した場合、何も問題は起きなかったのですが。(?_?)
840:デフォルトの名無しさん
07/04/14 13:02:13
SetWindowTextでタイトルが変わらないとか騒いでた奴か。
やっぱりおまえには早いと思うぞ
841:デフォルトの名無しさん
07/04/14 15:40:25
DLL や EXE に含まれているリソースの番号だけって取得できますか?
たとえばこの DLL の STRINGTABLE には、1000番 1001番の STRING が含まれています、という感じの API です。
842:デフォルトの名無しさん
07/04/14 15:45:04
FindResoource?
843:デフォルトの名無しさん
07/04/14 15:45:31
EnumResourceNames()
844:デフォルトの名無しさん
07/04/14 16:57:55
「普通ないだろ」が生む○○問題
845:デフォルトの名無しさん
07/04/14 18:00:38
>>825
Cだとコンパイルできる
C++だとコンパイルできない
846:デフォルトの名無しさん
07/04/14 18:26:15
なんで最近そんなことになってんだろうね
C言語でコンパイルできたソースが普通にC++で通らん
847:デフォルトの名無しさん
07/04/14 18:37:39
[アニメ DVD] ヤミと帽子と本の旅人 第04話 「マリエル」 (640x480 DivX511).avi
848:デフォルトの名無しさん
07/04/14 18:40:03
>>846
C++は、例えCとの互換性を失ってでも危険な香りがする暗黙の型変換を禁止した。
これだけは譲れないというやつ。
849:デフォルトの名無しさん
07/04/14 18:42:44
思いややりが無い朝鮮人的な思考だ
850:デフォルトの名無しさん
07/04/14 18:48:31
つーか、すっぱりと別言語にしちゃえば良かったのに
中途半端に互換性を持ってるからすごいカオスに
851:デフォルトの名無しさん
07/04/14 18:52:09
unsigned char*とchar*の代入なんてエラーにするほど危険かなぁ
なんか言語潔癖症的変な奴いるじゃないかなぁ
おかげで意味のないキャストをプチプチ入れてく無駄作業
こんなとこ明示的にキャストしたところでどうだというのか・・・
852:デフォルトの名無しさん
07/04/14 19:01:27
C++って型キャストが必須なんだっけか
俺Cメインだからうろ覚えだぜ
853:デフォルトの名無しさん
07/04/14 19:12:04
>>851
reinterpret_castが必要な場面ってそんなにある?
854:デフォルトの名無しさん
07/04/14 20:13:26
やっぱCがいいな。
855:デフォルトの名無しさん
07/04/14 20:16:32
C++で生のWin32 APIを使うとreinterpret_castだらけ。
Win32 APIは所詮Cを念頭において作ったという感じ。
>>849-851
それはC++作ったBjarneに言ってやれ。
静的型付けで強い型安全性でプログラマを守るというのがC++。
856:デフォルトの名無しさん
07/04/14 20:48:33
>>850
今までに何千人のプログラマが同じことを思っただろうな…
すべてが今更の話だが…
857:デフォルトの名無しさん
07/04/14 21:03:28
>>850
ゲイツ・ビルに言ってやってくれ
858:デフォルトの名無しさん
07/04/14 21:05:41
>>857
ビル・ゲイツの出した解がC#では?
いやビルが実際作ったわけではないけどさ。
859:デフォルトの名無しさん
07/04/14 21:13:34
C#もヤバい方向にいってると思うけどな
varってJavaScriptみたい
860:デフォルトの名無しさん
07/04/14 21:15:39
ヴァー
861:デフォルトの名無しさん
07/04/14 21:15:57
そうか?
型推論や関数型プログラミング的な機能を取り入れるのは最近の流行だよ。
862:デフォルトの名無しさん
07/04/14 21:29:34
所詮学者の独りよがりだよな
明らかになにも作ったことがないグズが言語仕様を決めてる気がする
863:デフォルトの名無しさん
07/04/14 21:50:53
おまえに32ビットの羅列ほいと渡して何型の変数か分かるのか?
864:デフォルトの名無しさん
07/04/14 21:55:46
>>862
言語の一つでも作ってみろよグズ
865:デフォルトの名無しさん
07/04/14 21:56:26
型推論はソースの冗長性を削る意味で有用だろうが。
866:デフォルトの名無しさん
07/04/14 21:56:41
>>862みたいにブツクサ独りよがりで文句を言うだけで、
かといって別に妙案も何にも持っていない奴を色んなところでよく見かける。
867:デフォルトの名無しさん
07/04/14 21:58:49
つーか、議論したけりゃ他所でやれ。
868:デフォルトの名無しさん
07/04/14 22:01:50
varをVariant型とかObject型と勘違いして拒否反応示している奴が結構いるみたいだな。
あとC++のテンプレート関数が型推論やってくれてるの知らない奴も多杉。
869:デフォルトの名無しさん
07/04/14 22:30:25
>>851
signed char が-128〜127の整数の集合
unsigned char が0〜255の整数の集合
例えば前者の変数を作成して
「リンゴをA店で100個、B店で155個買いました。
全部で何個でしょう」
という問題を解いて、答えが-1個だったらおかしいでしょう。
あまり問題だと思わないのは、先に16進ありき、だからじゃないかな。
870:デフォルトの名無しさん
07/04/14 22:39:53
もう止めようぜ
お前らこそ冗長にもほどがある
871:デフォルトの名無しさん
07/04/14 22:40:11
Dのautoキーワードの場合で書くと、
HogeClass obj = new HogeClass();
を
auto obj = new HogeClass();
みたいに書ける
ジェネリックプログラミングとかで
型がよく分からない時なんか更に便利
多分C#も同じ感じかと
872:デフォルトの名無しさん
07/04/14 22:42:06
>>870
リロードしてなかった
すまん
873:デフォルトの名無しさん
07/04/14 22:48:00
ザ・スレチガイ
874:デフォルトの名無しさん
07/04/14 22:53:41
(´ω`)
875:デフォルトの名無しさん
07/04/14 23:13:38
SuspendThread(this);
876:デフォルトの名無しさん
07/04/14 23:20:36
解決方法がわからないので教えてください。
MSVCRTD.lib(MSVCRTD.dll) : error LNK2005: _memmove はすでに LIBCMTD.lib(memmove.obj) で定義されています
というエラーが15個出ます(まったく同じlib同士なので制限の関係で割愛します)
どちらかをunloadすればいいかとおもってプロジェクトの設定からやってみたんですが、どちらを行った場合でも、Libファイルがないためのエラーが出ます。
どうかおねがいします。
877:デフォルトの名無しさん
07/04/14 23:42:19
>>876 おちつけ。大体意味は分かるが。
878:デフォルトの名無しさん
07/04/15 00:03:44
どちらかをunload→どちらか一方とリンクする という意味じゃないのか?
プロジェクトの中に、誰かが作ったライブラリ(スタティックリンクしちゃったやつ)が混じっているんじゃないか?
1.プロジェクトの設定−一般−MFCのスタティックライブラリを使用
2.プロジェクトの設定−C/C++−[カテゴリ]コード生成−[使用するランタイムライブラリ]マルチスレッド (デバッグ)
に設定したらビルドできるか?(EXEでなくてDLLを作る場合は マルチスレッド (DLL、デバッグ))
あと、↑の例はVS6だが、環境も知らせておくように。
879:デフォルトの名無しさん
07/04/15 00:29:00
GDI+のファイルの書き出しについて保存です。
読み込み、書き出しそのもの情報はあるのですが、Graphics→Imageにする方法がわかりません。
Imageにファイルを読み込んで、別の形式で保存するというのはあるのですが。
猫でもわかる〜を見ても読み込みまでしかかかれていないもので・・・
Graphics graphics(hdc);
//描画処理
このGraphicsをImageに変換するにはどうしたらいいのでしょうか?
880:デフォルトの名無しさん
07/04/15 00:37:17
>>878
ありがとうございます。できました
881:デフォルトの名無しさん
07/04/15 00:48:12
>>879
GDI+の扱いは分からんのだけども
GraphicsからBMPオブジェクト作ってImage.FromBitmapじゃ駄目?
882:881
07/04/15 00:51:32
不安になってMSDN見てみたらそんなメンバ無かったw
忘れてくれ
883:デフォルトの名無しさん
07/04/15 01:04:10
>>881
わざわざ調べていただいてありがとうございます。こちらでも確認したのですが、
Graphicの方にしかありませんでした。
884:デフォルトの名無しさん
07/04/15 01:06:28
間違ってました。Graphicsの方にもなかったです(汗 あるのはGraphics::FromImageですね。
885:デフォルトの名無しさん
07/04/15 01:08:59
それ何語?
886:デフォルトの名無しさん
07/04/15 01:10:16
エスペラント語でないことだけは確かだ
887:デフォルトの名無しさん
07/04/15 01:24:28
謎語を適当に喋ってみるテスト
Bitmapを作ってそこからGraphics:FromImage(bmp)で作ったGraphicsに
hdcをソースにして描画すればいいんじゃね
このスレ的にはhdcからBitBltするのかな?
888:デフォルトの名無しさん
07/04/15 01:32:04
>>887
ありがとうございます。その方法でいけました。
BitmapがImageと同じように使えるんですね。
889:デフォルトの名無しさん
07/04/15 02:40:09
ハンドル(CreateFileが返す値)から、元のファイルのフルパスを取得することができるAPIってありますか。
890:デフォルトの名無しさん
07/04/15 02:41:52
CreateFileで開いてフルパスじゃ無いって事は
カレントディレクトリパス+CreateFileに渡したパスで良いと思うけどどうかね?
891:デフォルトの名無しさん
07/04/15 04:52:59
他のアプリのフォーカスがあるコントロールへデータを送りたいのですが
以下の様なコードだと、アプリによっては正しくデータが送れません。
またブラウザで表示された、HTML領域のコントロールへも
データが送れたらなと思うのですが、どういう方法がありますでしょうか?
DWORD myid = ::GetWindowThreadProcessId(m_hWnd, NULL);
DWORD toid = ::GetWindowThreadProcessId(::GetForegroundWindow(), NULL);
::AttachThreadInput(myid, toid, TRUE);
//::SendMessage(::GetFocus(), WM_PASTE, 0, 0); //←貼り付けの場合は当り前だけど全て無問題
::SendMessage(::GetFocus(), WM_SETTEXT, 0, (long)"TEST STRINGS!!!");
::AttachThreadInput(myid, toid, FALSE);
892:デフォルトの名無しさん
07/04/15 04:55:36
HANDLE からもとのファイル名が知りたいって事じゃね?
俺はそんなAPI知らないけど。
893:デフォルトの名無しさん
07/04/15 04:57:23
送り先が間違っているんだろ
894:デフォルトの名無しさん
07/04/15 05:07:56
俺も送り先が間違っているに一票
他にもたまにウィンドウがフォーカス持ってないように見えてフォーカス持ってたり
フォーカス持ってるようしか見えないのにフォーカス持ってなかったりする場合がある
フック使ってフォーカスの移動でも見てみればいい
895:デフォルトの名無しさん
07/04/15 05:14:12
>>891
ブラウザは良く知らんが↓が参考になるかも試練
URLリンク(k-gensai.hp.infoseek.co.jp)
Webのフォームはウィンドウじゃないから普通に操作すんのは無理
896:デフォルトの名無しさん
07/04/15 05:59:00
>>893-894
アプリの種類によっては、エディットではなく
タイトルバーの文字列が設定されてしまう場合とかあるんですよね。。
完全にエディットにフォーカスがあるのを確認して、SendMessage()しているのですが…
もう少し試行錯誤してみます。
>>895
やっぱりフォームのコントロールへのデータ送信は
ちょっとややこしそうですね。
また自分でも色々と調べてみますね。
解決したらご報告致します。
897:デフォルトの名無しさん
07/04/15 06:04:32
>>889
GetFileInformationByHandleEx
Vista以外では
URLリンク(www.microsoft.com)
をインストールする必要があるけど。
Win9xでは公開された方法は存在しない
898:896
07/04/15 06:13:25
具体的にいうとこんな感じなんですけどね。。
メモ帳のエディット部に送信 → 無事設定される
サクラエディタのエディット部に送信 → タイトルバーに設定される
Firefoxのアドレスバーに送信 → 無反応。。
やっぱり見た目にフォーカスがあっても
内部ではフォーカスが無い場合ってのがあるんでしょうね。
899:896
07/04/15 06:15:07
IEのアドレスバーには問題なく設定できるようです。
とりあえずどうしようもないので調べます。
900:デフォルトの名無しさん
07/04/15 06:19:13
あ、Fileextd.libはスタティックだからインストールが必要なのは開発者のほうだけね
901:デフォルトの名無しさん
07/04/15 06:23:19
>>898
Windows標準のエディットコントロールはWM_SETTEXTを独自に処理してるので
エディット部に設定される
それ以外のほとんどのウィンドウはWM_SETTEXTを処理しないのでデフォルト処理で
タイトルバーへの設定が行われる
子ウィンドウでタイトルバーが表示されていなければ無反応に見える
エディットコントロール(のように見えるもの)にテキストを設定する汎用的な方法は
存在しない
902:896
07/04/15 06:40:29
>>901
なるほど〜
確かにWM_SETTEXTで設定出来るのは
どれもオーソドックスなエディットだけですね。
う〜ん、困ったなぁ。。。
903:デフォルトの名無しさん
07/04/15 06:58:58
そもそも WM_SETTEXT は外から使うことを考慮していない。使えるように実装されているだけ。
文字を送るだけなら他の方法がある。
904:デフォルトの名無しさん
07/04/15 07:06:10
でも使えるように実装するのが普通だよな
今FireFox見てみたけどおかしな作りだな
905:896
07/04/15 07:25:30
別アプリのWebFormのコントロールに
データを設定する事なんて果たして可能なのかなぁ。。
906:デフォルトの名無しさん
07/04/15 07:48:59
IWebBrowser2で検索すると参考になりそうなサイトは沢山ある
が、理解できるかは知らんよ
907:896
07/04/15 07:50:37
>>906
情報ありがとうございます。
頑張って調べるしかないですね。
908:デフォルトの名無しさん
07/04/15 08:04:31
IEなんかは一見標準コントロールを使っているように見えるが
あれは全て自前描画のフルスクラッチだから、普通の
コントロールのように扱うのは無理だよ。
909:896
07/04/15 08:09:08
>>908
MSのアプリってそういうの多いみたいですね。。
あとAdobeのものとかも自作コンポーネントとかが沢山で。
ウェブフォームの方は、情報が色々と出てきて
どうにかなりそうな気がしてきました。
助言を下さったみなさま、ありがとうございました。
910:デフォルトの名無しさん
07/04/15 10:22:07
Windows Presentation Frameworkのコントロールも全部(API的には)自前描画だな
アンマネージなアプリから設定するのは結構骨が折れる
911:デフォルトの名無しさん
07/04/15 10:24:23
Windows Presentation Foundationだった
.NET Frameworkと微妙に混ざった
あとJavaのSwingアプリとか(AWTやSWTはプラットフォームのコントロールを使ってる)
912:889
07/04/15 10:35:31
>>897
ありがとう。
GetFileInformationByHandleEx の FileNameInfo で99%できた。
しかし、ドライブレターが無いのだ。
つまり、L"\\Windows\\System32\\ntdll.dll" みたいなのが返ってくる。
C: の部分はどうやったら良いかもお願いします。
913:デフォルトの名無しさん
07/04/15 11:04:30
>>912
VistaならGetVolumeInformationByHandleW
2000/XPだとGetFileInformationByHandle(Exじゃないほう)と
FindFirstVolume/FindNextVolume/FindVolumeClose/GetVolumeInformationの
ボリュームシリアル番号を付き合わせる、くらいしか思いつかない。
914:デフォルトの名無しさん
07/04/15 16:31:07
おにいさま…涙が…止まりません
915:デフォルトの名無しさん
07/04/15 21:06:53
辛子明太子を食べろ
916:デフォルトの名無しさん
07/04/15 21:23:52
エディットボックスで英数字だけ使うのってできないんだっけ
917:デフォルトの名無しさん
07/04/15 21:32:53
エディットボックスでWM_CHAR引っ掛ければ余裕
918:デフォルトの名無しさん
07/04/15 21:50:32
クリップボード経由でペーストされたら?
919:デフォルトの名無しさん
07/04/15 21:52:15
WM_PASTE見張ってれば良いじゃん
頭使ってる?
920:デフォルトの名無しさん
07/04/15 22:20:42
WM_SETTEXTとかEM_REPLACESELとかも見張る必要あるだろ
921:デフォルトの名無しさん
07/04/15 22:21:09
見張ればいいじゃん。
労力使ってる?
922:デフォルトの名無しさん
07/04/15 22:24:53
他にもワナがありそうだな。
EditBoxのあるダイアログのOKボタンが押されたときにでも、
データが適切であるかを確認する方がよほど楽だろうな。
923:デフォルトの名無しさん
07/04/15 22:26:46
頭も使う労力も無い人に金言を授けよう
駄 目 な 奴 は 何 を や っ て も 駄 目
924:デフォルトの名無しさん
07/04/15 22:28:52
本人から言われると重みがあるな
925:デフォルトの名無しさん
07/04/15 22:30:53
あれ、英数字ってなかったっけ?
俺の気のせいか
926:デフォルトの名無しさん
07/04/15 22:31:52
数字だけならあったけどな
927:デフォルトの名無しさん
07/04/15 22:32:54
>>925
MFCのDDXならデジットチェックあるんだよ。
だけどここはWin32APIだから。
928:デフォルトの名無しさん
07/04/15 22:46:22
DDXも入力はできちゃう
929:デフォルトの名無しさん
07/04/15 22:55:15
って EM_CHANGE / EM_UPDATE じゃいかんのけ?
930:デフォルトの名無しさん
07/04/15 23:52:12
>>929
いいんとちゃう?
931:912=889
07/04/16 00:58:15
>>913
OSはXPです。
FindFirstVolume/FindNextVolume/FindVolumeClose だと "\\?\Volume{GUIDっぽい文字列}\" みたいな文字列で、どう扱ってよいか分からず断念。
ドライブレターありきで、割り切ることにしました。
マウントでも破綻するかもしれないですが、これも割り切り。
(1) ファイルのハンドルを GetFileInformationByHandle に渡して、ファイルのボリュームシリアル番号を得て、
(2)GetLogicalDriveStrings の結果を GetVolumeInformation に渡して、各ドライブのボリュームシリアル番号を得て、
(3)上記(2)のボリュームシリアル番号のうち、(1)のボリュームシリアル番号に一致するのがファイルが居るドライブと判定。
という方法でとりあえずやりたいことはできるようになりました。
御礼を兼ねて報告。
932:デフォルトの名無しさん
07/04/16 01:24:18
>>931
こんなの見つけた。Win2kだとさらにやり方が違うみたい
URLリンク(www.ultrasync.net)
もし非公開API使ってもいいならNtQueryVolumeInformationFileがたぶん使える
933:デフォルトの名無しさん
07/04/16 01:39:17
あーどっちにしろ"\\?\Volume{GUIDっぽい文字列}\"からドライブ名への変換は
必要か。じゃあGetLogicalDriveStringsからたどるのが一番簡単だな
934:デフォルトの名無しさん
07/04/16 12:04:45
どうでもいいけど、>890の方法はダメだな。
カレントディレクトリパスなんてファイルダイアログを開くだけで変わってしまう。
APIを駆使する方法以外では、素直にCreateFile時にフルパスを保存しておくしかないね。
935:デフォルトの名無しさん
07/04/16 14:28:11
wParamとlParamについてどなたか
やさしく教えてください。
936:デフォルトの名無しさん
07/04/16 14:44:33
>>935
最早その名前に何の意義も無いので、適当に使い分けましょう。
937:デフォルトの名無しさん
07/04/16 14:44:42
メッセージに追加の情報を付加するためのもので、メッセージ毎に意味が違う。
個々のメッセージ毎にどういう意味を持つかはMSDN Libraryに書いてある。
938:デフォルトの名無しさん
07/04/16 14:46:00
イベントが呼ばれたときに設定される変数で
意味はそのイベントによって異なる。
939:デフォルトの名無しさん
07/04/16 14:46:01
>>936
使い分けだったら、ポインタはlParam、ハンドルはwParamに入れられる傾向にある。
Win16で、ハンドルとwParamが16ビット、FarポインタとlParamが32ビットだった名残だが。
940:デフォルトの名無しさん
07/04/16 14:50:40
lParamのlってlongのこと?
じゃあwはword?
941:デフォルトの名無しさん
07/04/16 14:56:05
l
w
942:デフォルトの名無しさん
07/04/16 15:09:26
>>940
そうだよ。Win16では当初ウィンドウプロシージャもこういう宣言だった。
LONG FAR PASCAL WindowProc(HWND, unsigned, WORD, LONG);
Win16後期になってくると、LRESULT/UINT/WPARAM/LPARAMが出てきて、
現在のWin32でも通用する形になった。
LRESULT FAR PASCAL WindowProc(HWND, UINT, WPARAM, LPARAM);
943:デフォルトの名無しさん
07/04/16 16:54:13
リソースの STRINGTABLE の最大文字列長は何バイトですか?
944:デフォルトの名無しさん
07/04/16 17:41:21
>>943
ちょっと的を得てなくて申し訳ないんだが、
リソースも所詮ファイルなので、リソース全体ではNTFSの2TB弱が限界だろうか。
この辺ウラとってなくて申し訳ない。
Win32APIだとLoadString関数を使う事になるが、これは文字数にintを使ってる。
さらに、32bitのWindows2000系でのユーザーメモリ空間は2GBなので、
VC/VC++6.0では1回で使える文字列は2GB弱が限界だと思われる。
#VB6.0のString型はUNICODEで32766文字。
945:デフォルトの名無しさん
07/04/16 17:48:28
>>944
>VB6.0のString型はUNICODEで32766文字。
便乗でスマソ
BSTR型は、ポインタの一つ前に文字長が入っているんだっけ?
946:デフォルトの名無しさん
07/04/16 17:54:15
>>943
WCHAR形式で格納されていて、最大0xFFFF文字(NULL文字を含まない)
947:デフォルトの名無しさん
07/04/16 17:55:20
>>945
文字長ではなく終端を含まないバイト数
948:デフォルトの名無しさん
07/04/16 20:16:07
RASCALってなんですか?
949:デフォルトの名無しさん
07/04/16 20:17:10
アライグマ
950:デフォルトの名無しさん
07/04/16 20:49:44
Helphiじゃないの
951:デフォルトの名無しさん
07/04/16 20:51:13
RASICかもしれん
952:944
07/04/16 20:54:53
>>943
さっきは適当な事を言ってすみません。
URLリンク(blogs.msdn.com)
この、(2007年1月頃の)ページでは、「ヘルプで明文化されている最大値の最低限は4097バイトである」
(つまり、デフォルトで4097バイトまでは問題ない)
「しかも、他の地域版のMSDNヘルプでは限界すら書いてない。本当の限界を調べてみないか?」とあるが、
レスは「そんな意味の無い事を・・・」とにべもない。
フォーマット的には>>946でしょうが、このアーティクルが本当なら
サードパーティツールを考慮して4097バイト(2047文字)に抑えた方が良さそうです。
#VB6のString型は、最大32767文字なのですが、最大まで使ってしまうと
#ヌルターミネータ(文字列最後の0)が入らないまま保存されます。
#VC/VC++6.0では、最も重要なCComBSTRですら文字列長プレフィックスを考えてません。
#だから、安全にプログラムするなら32766文字が良いです。
953:デフォルトの名無しさん
07/04/16 21:25:15
Acronis True Imageのtibのマウントみたいな仮想的な
ドライブを作りたいのですが、DDKが必要なんでしょうか?
954:デフォルトの名無しさん
07/04/16 21:27:40
たたき台になるサンプルがあれば良いのですが…
955:デフォルトの名無しさん
07/04/16 21:51:07
ここで質問する程度の人はそんなものに手を出さないでくださいお願いします
956:デフォルトの名無しさん
07/04/17 10:23:19
仮想フォルダレベルで良いならcabviewのソースがサンプルにある
DDKやIFSならスレ違い
957:デフォルトの名無しさん
07/04/17 17:52:02
Win32 APIオフィシャルリファレンス改訂3版 グラフィック/GUI編
URLリンク(www.amazon.co.jp)
この本の評価どなたかよろ。
958:デフォルトの名無しさん
07/04/17 17:55:15
COMスレかDDKスレでどうぞ
959:デフォルトの名無しさん
07/04/17 18:24:32
>>948
AppleのMacintoshが出た当時に結構出回ってた開発言語。
ってこれはWin32APIは関係ないね
960:デフォルトの名無しさん
07/04/17 18:48:25
Win2k以降でネットワークアダプタの現在のリンク速度とDuplexを取得する汎用的な方法ってあるんでしょうか?
961:デフォルトの名無しさん
07/04/17 19:11:38
WMIで取れたっけ?
962:デフォルトの名無しさん
07/04/17 19:46:16
CIM_NetworkAdapter, Win32_NetworkAdapterあたり?
全二重とかはソック叩くんだっけ?
963:デフォルトの名無しさん
07/04/17 20:04:25
DDK
964:デフォルトの名無しさん
07/04/17 21:40:23
>>940
l (lol
w (w
965:デフォルトの名無しさん
07/04/17 21:52:40
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
966:デフォルトの名無しさん
07/04/17 21:54:27
WORD wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww;
do{
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww = GetAsyncKeyState( VK_SPACE );
}while( !wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww );
967:デフォルトの名無しさん
07/04/17 21:57:06
>>960
GetIfTable
968:デフォルトの名無しさん
07/04/18 00:15:59
/: : : : : : : : : : : : : : : : : `丶、
/ : : : : : : : : ‐- : :、: : : : :ヽ: : : : \
{  ̄: : : : : : : : : : : : : : :ヽ、: : : ヘ: : : : : ヽ
,.ヘ: : : : : : : `丶 : : : : : : : : `く/ ヘ: : : : : :',
/: : ヽ: : \: : : : : \: : -―: : : :`く: : '.,: : : : :l
,': {: : : \: : :ヽ、: : : : :\ー‐、: : : :ヽ:\: ヽ : : :|
l: :l : : : l \: : : \‐=V弋芝圷\: \l\l : : :|
|: :l: :: : {xく´_\`ヽ:ヽ Vヘソ |: : |: : }: :./i
l: :l:ヽ : ヽ仗圦 \ ゞ''´ ノ: /l: :ハ/ 、ノN
ヽヘ: :\ ヽVヘ:} // j/-j/ 乂 ノ: :j
丶\: ヽ: ゞ'' 、 ハ! : : :ヽj、_,ヘヘi彡'
`ヘ> - ' / V廴V-へ∠`´__
ヽ、_ / ヽ/ ̄/ '⌒ヽ `丶
\ミ、ー:- -イ / / / ヽ \
ヽ:八{\少} / / / ∨ \
'′_>' /’ __,/ / / | \
,イ /、 ´/ /´ | \
/l│ / __/ / / | /
/│| /V / / / | _/
││{ / /V / r'´ ノ¨ ̄´
| ヘ ∨ ∨ ̄ ̄/ } /
969:デフォルトの名無しさん
07/04/18 00:20:20
┌─‐「][] _,ィ ´ ̄`ヽ、
 ̄ ̄} | _ /:.ゝ-─‐<>
r─' ノ 「Y {´ ̄`ン':.:.:.:.:.:.:.:.:.:.:.:.:}{
 ̄ Lハj_, ィ'´⌒⌒ヽ、:.:.:.ィ、ハ
[[] 「} _/∠二ニニニ¬、_ハ:.:.:.ヽヽ',
rー'_ノ //´ 了~~~⌒~`ヽ.弋゙Tl:.:.:.:_j」 l
{ { { j} }士ぅ'´:.:_〉|
い、__ >、___ __, ィ人 ヽく_:./:.〉ゝ
ィ ⌒ >'/ い 〉~~〉T~~T< ヽハ 〈_:.く
( _ イ `7 ハ⊥__j_i___〉 ,}イ 〈_/
( _) ハ__厶>ー‐一_7 /´
ゝ ___,ノ /ーY):::ノ ` ̄´厶.、/_
{::::::::/ /⌒ー'::::::}
 ̄´ {:::::::::;: ィ
970:デフォルトの名無しさん
07/04/18 01:48:13
ちょっと早いけど、埋めモードに入ってるっぽいんで新スレ立てておくよ
971:デフォルトの名無しさん
07/04/18 01:55:01
51 スレリンク(tech板)
50 スレリンク(tech板)
49 スレリンク(tech板)
48 スレリンク(tech板)
47 スレリンク(tech板)
46 スレリンク(tech板)
45 スレリンク(tech板)
44 スレリンク(tech板)
43 スレリンク(tech板)
42 スレリンク(tech板)
41 スレリンク(tech板)
40 スレリンク(tech板)
39 スレリンク(tech板)
38 スレリンク(tech板)
37 スレリンク(tech板)
36 スレリンク(tech板)
35 スレリンク(tech板)
34 スレリンク(tech板)
33 スレリンク(tech板)
32 スレリンク(tech板)
31 スレリンク(tech板)
972:デフォルトの名無しさん
07/04/18 01:55:27
誤爆したw
新スレはこちら
Win32API質問箱 Build52
スレリンク(tech板)
973:デフォルトの名無しさん
07/04/18 02:37:36
970前から埋めは気が早すぎないかw
974:デフォルトの名無しさん
07/04/18 02:53:30
〜(^o^)〜
〜(^o^)〜
〜(^o^)〜
〜(^o^)〜
〜(^o^)〜
〜(^o^)〜
〜(^o^)〜
〜(^o^)〜
〜(^o^)〜
〜(^o^)〜
〜(^o^)〜
〜(^o^)〜
〜(^o^)〜
〜(^o^)〜
〜(^o^)〜
〜(^o^)〜
〜(^o^)〜
〜(^o^)〜
〜(^o^)〜
〜(^o^)〜
〜(^o^)〜
〜(^o^)〜
〜(^o^)〜
〜(^o^)〜
975:デフォルトの名無しさん
07/04/18 02:54:00
〜(^o^)〜
〜(^o^)〜
〜(^o^)〜
〜(^o^)〜
〜(^o^)〜
〜(^o^)〜
〜(^o^)〜
〜(^o^)〜
〜(^o^)〜
〜(^o^)〜
〜(^o^)〜
〜(^o^)〜
〜(^o^)〜
〜(^o^)〜
〜(^o^)〜
〜(^o^)〜
〜(^o^)〜
〜(^o^)〜
〜(^o^)〜
〜(^o^)〜
〜(^o^)〜
〜(^o^)〜
〜(^o^)〜
〜(^o^)〜
976:デフォルトの名無しさん
07/04/18 04:00:25
ume
977:デフォルトの名無しさん
07/04/18 08:14:35
埋め埋め
ところで、国内の治安も悪くなったねー
978:960
07/04/18 09:08:30
>961
WMIだと未実装らしくてNULLが入ってますorz
979:960
07/04/18 09:17:31
>967
MIB_IFROW.dwSpeedで速度は取れるようですが、Duplexは無いようです。
このあたりはメーカー独自のレジストリ構造だし、泥臭くいくしかないのか・・・
最終的には設定までやりたいんですが、
手持ちのNIC調べただけでもメーカーごとに全部違うようで
SpeedDuplex/ConnectionType/ConnectionType_A
980:デフォルトの名無しさん
07/04/18 11:56:37
ume
981:デフォルトの名無しさん
07/04/18 12:33:32
膿め
982:デフォルトの名無しさん
07/04/18 13:51:52
俺様は産む機械ィィィィィィィィィィィィィィィィィィィィィィィィィィィィィィィィ!!!11!!
983:デフォルトの名無しさん
07/04/18 14:39:08
梅
984:デフォルトの名無しさん
07/04/18 16:39:06
だからドライバから取れって
985:デフォルトの名無しさん
07/04/18 16:57:05
マイナスですかプラスですか?
986:デフォルトの名無しさん
07/04/18 17:54:21
生め
987:デフォルトの名無しさん
07/04/18 19:03:08
マイナスでもプラスでもありません
988:デフォルトの名無しさん
07/04/18 19:07:55
運転手だよね
989:デフォルトの名無しさん
07/04/18 19:42:35
IEやエクスプローラと同一の履歴の取得ってどうやるのでしょうか?
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
4978日前に更新/230 KB
担当:undef