乙
┌─┐ │●│ └─┤ _ ∩ ( ゚∀゚)彡 ┌─┬⊂彡 │●│ おっぱい!おっぱい! └─┘ おっぱい!おっぱい!
おまえらもう喧嘩するなよ Windowsプログラマが日本で一番性格が悪いと言われるぞ
犬糞コミュニティの閉鎖性以上に性格悪いのなんて無いから大丈夫
BSDは?
BSE?
そんなことすら分からない頭の悪さはどうしようもないな。
どれだけ阿呆なんだ? どれだけ頭が悪ければ気が済むんだろう? 何も知らないお馬鹿さん。 無知だったのが理解できて良かったね。 これだけ論破されれば少しは反省できたろう。
____ / \ / ─ ─\ / ⌒ ⌒ \ | ,ノ(、_, )ヽ | \ トェェェイ / / _ ヽニソ, く 三. i! ゙ヽ、 Y" r‐!、 ヽ. 三 ヽ. 、 ''´⌒ゝ-‐'" _ィ》 Y! \_|!_二|一"f , !゙\ 三 〈, l|゙》-i|┴ーi´ / イ ´ i! 三 ♪ ゙ー-ニ二__,/ / / 三 ♪ /゙ У / / 三 //,/-‐、 / i! _{! j!'〈 ♪ / ,,.ノ \'' ヽ \ 〈 ーぐ \ ヽ ゙ー″ 〉ー- 〉 〈___ノ
ほす
16 :
デフォルトの名無しさん :2009/11/30(月) 20:02:47
サウンドボードを使って8bitサウンドを鳴らす(サンプリング再生やwaveファイル再生じゃない)にはどうすればいいんでしょうか? プログラミング方法を教えていただけないでしょうか。
HBRUSH burasi; という変数を作ったら「萎えるからこういう変数名はやめてくれ」と言われた
DirectSoundで勘弁してやれよw
8bitサウンドというのが8bitPCMじゃなくてFM音源やPSGのことならそんなものはない、が正解だろ。 どっかから音源エミュレータ拾ってくるとか。
DirectSoundはWin32APIじゃないからなぁ
>>20 >8bitPCMじゃなくてFM音源やPSGのことなら
自分でエミュレータを書きたいって話では?
vista32bit、VS2008のwin32プロジェクトで作成したプログラムが ネットブック(XP-home sp3) で動きませんでした。 ところが、こっちにもVS2008をインストールしただけで動作しました。 win32プロジェクトで作成したプログラムは、 特別なランタイムなどを必要としないと思っていましたが、 私は何か勘違いをしているのでしょうか?orz ゲームのコンフィグ系のプログラムなので、わりと焦っていますorz
VC2008 のランタイムが必要。MS のサイトからダウンロードできるよ。
>>23 おおかたC/C++ランタイムをDLLにしてたんだろ。
そっから先はAPIじゃなくてコンパイラの問題なので該当スレに
> ゲームのコンフィグ系のプログラムなので、わりと焦っていますorz 意味が分からない
何も知らないお馬鹿さん。
そんなことすら分からない頭の悪さはどうしようもないな。
コマンドの出力を英語で取りたいのでCreateProcessでアプリを起動する時に 一時的にコードページを英語へ変更する方法を探しています システムのロケールを変更してしまうと途中で落ちたようなときに元に戻らないので 起動するプロセスのみコードページを変更する方法ってありますか?
LoadStringで失敗したときバッファにNUL文字がセットされるのは保証されてますか? つまりこういうプログラムでコンソールに 0 と出力されるのが保証されているか?ということです。 wchar_t str[16]; memset(str,0xcc,sizeof(str)); LoadStringW((HINSTANCE)0xdeadbeef,0x12345678,str,_countof(str));//わざと失敗させる cout<<wcslen(str);
>>26 ひとつひとつの単語の意味は判るが
どうしてそれが焦りになるのかがわからん
Return Value If the function succeeds, the return value is the number of TCHARs copied into the buffer, not including the terminating NULL character, or zero if the string resource does not exist. とは書いてあるな。実際に 0 が返ってくるのか知らんけど。
あ。これバッファじゃないじゃん。ごめんごめん。
LPCWSTR _S(UINT nID); 実行ファイルのStringTableリソースに埋まってるUnicode文字列のアドレスをダイレクトに得る。 見つからなければ空文字列を返す。 例: MessageBoxW(hwnd, _S(IDS_HELP), _S(IDS_TITLE), MB_OK); という関数を作ればいい。
ディレクトリ操作で、ハードリンクがあると無限ループしたりしますか? ループしていたり、リンクの部分を除いたり出来ますか
FindFirstFile()からのツリー辿りならよくやるが全然意識してないで使ってるわ
FILE_ATTRIBUTE_REPARSE_POINTで蹴るとか、 フルパス長や再帰レベルに制限を付けておくとか、そんな感じ?
windows apiを使用して、linuxの命令が動くヘッダ作成する人いますか? wikiにして、できたやつを誰でもうpしていく形式で。
>>39 1行目と2行目の繋がりが見えないけど、
GCCとBinutilsをクロスコンパイル用にビルドして、
Windows上でLinuxで動く実行ファイルをコンパイルする環境を作ることはできる。
まあスレ違い。
最終的にcygwinと同じものが出来上がるんじゃね
ネイティブで、linuxソースがビルド可能にするんです。 windows apiが標準 = linux, unixから外れているのでそれを保管するんです。
まあスレ違い。
>>42 つSubsystem for UNIX-based Applications (旧Services for UNIX)
45 :
42 :2009/12/03(木) 00:26:44
SUA はVista 以降標準装備だし、無駄な努力だな。
携帯から失礼します。 質問させて頂きます。 たまにサンプルプログラムを見るとAPIの頭に::が付いていることがあります。 有る無しではどう違うんでしょうか? (例) MessageBox(...); ::MessageBox(...); ご回答宜しくお願いします。
それはAPIの質問ではなく、言語仕様の話。 スレ違い。
C++ でいうところのクラスのメンバ関数なんじゃないかな。 よくわかんないけど。
わかってたらスレ違いだとわかるから質問しらしないだろw 例えば ::MessageBoxはどのクラスにも属さない関数であるところの MessageBoxを表し、クラスメソッドと区別する為に 使われたりする。(無名クラスに所属しているという説もあるが)
>>47 インテリセンスを効かせる為に::を付けてるだけと、どこかのスレで見たことある気がする
完全にうろ覚えだが・・・
どんなサンプルかにもよるだろう MFCだとCWnd::MessageBox()と区別するのに必要なこともあるし。
>インテリセンスを効かせる為 俺の書き込みの予感
>インテリセンスを効かせる為 VC6時代が始まった10年以上前から常識ですが
55 :
47 :2009/12/04(金) 09:13:50
みなさん色々レスありがとうございます。 また、携帯から失礼します。 要はC++でいうところのthisポインタと一緒でthisが省略出来るように::を付けても付けなくても動作は一緒ってことですね。 class foo { private: int a; public: foo() { a = 0; } ~foo() { } int func1() { return this->a; } int func2() { return a; } };
ちげーよ馬鹿 つーかC++スレ行け
DelphiでWindowsプログラミングする奴って少ないのは どして?
>>57 Delphiを使うメリットとデメリットを考察して、メリットが少ないと判
断する人が多いから。もしくはDelphiを知らないから候補にもならない。
Delphiを知らない人や、使うメリットとデメリットを差し引きして
メリットが少ないと判断する人が多いのはどして?
か
>>58 が答えてくれるんで期待
Windowsプログラマに限った場合 Delphiを知らない人はC++も実はたいして知らない人だ しその逆も言えるのかもな
61 :
デフォルトの名無しさん :2009/12/04(金) 10:53:30
新規にDelphiやるのは高いし参考書も少ないし ってのがあるんじゃないのかな。 ところで、ウィンドウ関数内で使うオブジェクトはグローバス変数じゃなくて やっぱりウィンドウ関数内で static な変数にするのがいいのかな。 その場合、プログラム終了したとき、メモリの解放忘れとか気にしなくていいんだよね? やっぱり DeleteObject() やらないとだめなのかな。
INITCOMMONCONTROLSEX INIT COMMON CONTROL SEX
64 :
デフォルトの名無しさん :2009/12/04(金) 12:54:22
グローバス変数というものは存じ上げないのでアドバイスできません。
バックアップツールを作りたいです。 ReadDirectoryChangesWで削除・更新を察知できるのですが 削除が判明した時点でファイルが無くなってしまいます。 消される前に、バックアップする方法ありますか。
OSの全ての削除ルーチン、ファイル更新ルーチンを乗っ取って 削除の前にはバックアップとか出来ればいいのですが。 これは無理ですよね。
ファイルが作成された時点でバックアップを取っておけばよろしい
全てのファイルの過去データを、はじめにコピーしておけば解決しますが 場所食うのがいやなんです。 Em、秀丸のバックアップのように更新前だけ保存する方法無いですか。
そんな明らかに危険そうなブツがAPIとして整備されるはず無いだろが APIを何だと思ってるんだ?
ない
>>69 非公開APIの8割型以上は、作成者内輪以外の呼び出しは危険
コンテキスト依存なんで。
公開APIも仕様が100%公開されているわけでもないので
100%の安全性の保証は無いものと思うべし。
断片情報だけが公開されたものを公開APIというのも何だか
な〜だが。APIを何だと思ってた?
ゲームなんかが一時的に作成するファイルを 自動で別フォルダにコピーしてゴニョゴニョしたい とかそういう理由か?
>断片情報だけが公開されたものを公開APIというのも何だか オープンソースにしない限り、"公開"APIといえないとでも思ってるのか どれだけ阿呆なんだ?
非公開 API は使用しない 公開 API は公開された情報の範囲内で使用する こんなの 常 識 です
75 :
デフォルトの名無しさん :2009/12/04(金) 15:34:03
リストコントロールについて質問です。 レポート形式で使用しています。(VC2005) (1) リスト行数100で1ページ表示5行で 現在10ページ目の1番目の項目が選択されています。 この状態で一度全ての項目を削除し再入力して 新たに10ページ目の1番目の項目を選択させたいので SetItemStateなどで選びなおしました。 しかし、10ページ目の1番目が選択されているようですが 表示は1ページ目になっています。 これを10ページ目にしたくてSetScrollPosをしましたが うまくいかず、表示が変になります どうやったら10ページ目の表示にできるのでしょうか? (2) 拡張スタイルにLVS_EX_GRIDLINESを使用していますが スクロールしたときにグリッドラインの残像が残ってしまいます この残像を綺麗にけすのはどうしたらいいのでしょうか?
公開された情報とて拘束性は全くなく例えば CreateProcessの戻り値がOK(成功)でも 実際のプロセスの起動が30分後になるよう なケースが無いとも言い切れない。
エディットコントロールにSetWindowTextで文字を入力すると スクロールが初期位置まで戻ってしまうんですが、 この時どういったメッセージがポストされているのでしょうか? WM_SETTEXT (何か) WM_PAINT という順で処理されていると思うのですが・・・
78 :
47 :2009/12/04(金) 19:27:18
>>56 すいません、違うんですか
>>63 テンキーです、分け合ってインターネット繋がってないので携帯オンリーで2chやってます。
自分の無知、勉強不足でスレを汚してしまいすいませんでした。
もう一度、レスを参考にしっかり調べ直してから出直してきます。
レス下さった方々ありがとうございました。
>>77 WM_SETTEXTの内部処理の途中で戻っているだけだろ。
別のメッセージがポストされたとかいう話じゃない。
一旦中身をクリアしていると考えれば、初期位置に戻っても不思議じゃない。
>CreateProcessの戻り値がOK(成功)でも >実際のプロセスの起動が30分後になるよう CreateProcessから戻ってきた時点でまだ起動してないと思ってるのか。 どれだけ頭が悪ければ気が済むんだろう?
数個コードが実行されて30分止まって再開されても 立派なスケジューリングでありプロセスは起動されてる ことになるな
PROCESS_INFORMATIONにプロセスのハンドルが得られている = OSのプロセス生成処理は完了している 「実際のプロセスの起動」って何だよ 画面にウィンドウ等が出るまで実際にプロセスは起動してないとでも言いたいのか
>>78 テンキーでソースコードって打てるものなのか?
>>83 プロセスハンドルが作られて実行が確約さてれいても、
そのプロセスのコードが本当にいつ実行されるかは「勝手でしょ?」な話。これはWindowsに限らずUnix でも同じようなこと
が言えるけど...
>プロセスハンドルが作られて実行が確約さてれいても、 この時点がプロセスの起動だろ
ウィルスチェッカーとかがOSレベルで正式サポートに なって、実行直前スクリーニングとかが行われると したらシステムがビジーな場合やデータダウンロード が必要な場合とかには、実プロセス実行まで相当待たされる ってことは現実問題ありそう。
CreateProcessから返ってきたらプロセスは"起動"している
ただしいつ"実行"されるかは未知数
つまり
>>76 がバカ
ExecuteProcessではなくCreateProcessであって 実行まで担保しないのはAPIの名前から読んで字の如く
CreateHogeってのは"Hogeカーネルオブジェクトを生成する"って意味だぞ? CreateEvent → Eventオブジェクトを生成する CreateFile → Fileオブジェクトを生成する CreateProcess → Processオブジェクトを生成する これを理解して無いとCreateProcessで実行云々とか 既存ファイルをオープンする場合でも"Create"Fileなんて変だ などと頓珍漢な発言をする。
91 :
23 :2009/12/05(土) 02:46:33
>>25 その通りでした☆
また、最後の1行は意味不明すぎると自分でも思います。
失礼しました。はずかしい><
WDKのコンパイラでビルドすればいい。
ハンドルは数値にすぎず、ユーザー空間のメモリアドレス と直接の対応はない。あくまでもDLL内部やドライバなど で管理する情報のID。 これを理解して無いとCreateProcessでファイル作成云々とか 既存ファイルをオープンする場合でも"Create"Processなんて変だ などと頓珍漢な発言をする。
失敗したときLastErrorにセットされるエラーコードの一覧ぐらい書いとけって思う。 拡張エラー情報を取得するにはGetLastErrorを使え、みたいな説明だけでは不十分。
決まってないし、決めるつもりもないし、変わっていく筈 バージョン依存。しかもマイナーバージョンレベルでコロコロ 変わる筈。だから書かないし書けない。そういうところがあるだろな
同じようなエラーコードがあるのがさっぱり分からん。 例えば ERROR_NOT_ENOUGH_MEMORY ERROR_OUTOFMEMORY メモリ不足のときにどっちが設定されるんだ?
関数型がvoidで失敗するとSEHを投げるという糞仕様のAPIもあるけどな
BOOLを返すといいながら3種振り分けが必要な糞仕様のAPIもあったな
ド素人は黙ってた方が身のためですよ?
馬鹿がGetMessageについて語ると無知を晒すだけだからやめとけ。
> BOOLを返す return BOOL; ???
自分のプロセスのヒープを、他のプロセスからReadProcessMemory()されるのを検知するか拒否する方法はありますか?
ヒープは氏らね VirtualAllocで取った奴ならVirtualProtect使えるが
拒否なら名前付mutexで同期するだけでいいだろうけど検知はできるのかすら知らん
つ nPro
>>104-105 ありがとうございます
詳しく調べてきます
アトミック操作で隠すのは気づきませんでした
>>106 秘密鍵をできるだけ見られたくないので、nProもどきをカーネルドライバ等作らずできないかと思って聞きに来ました
>>107 生のデータがメモリ中に存在してる限りそんな物は不可能だし無意味
仮想PC上でソフトを動かしてホストOSからメモリをダンプするとか方法は幾らでもある
移動型ガベージコレクタみたいなものを使えばデータが頻繁にあちこち移動して読まれにくくなるかも (たぶん)
自分のウィンドウがWM_MOUSELEAVEを受け取りつつも自分の一つ裏側にあるウィンドウに マウス系統のメッセージが行くようにするにはどうすればいいでしょうか? やりたいのはデスクトップの最前面に常にキャラクターを表示し、マウスが重なってるときだけ半透明にしたいんです。 それでも、マウス系メッセージは裏のウィンドウに飛ばして普通に操作できるようにしたい。 今のところWS_EX_TRANSPARENTで試しましたが、一度これを設定してしまうと マウスがウィンドウから退いた時にそのイベントを受け取れなくて困っています・・・。
昔似たような動作をする時計を作ったときはWS_EX_LAYERED|WS_EX_TRANSPARENTでマウス透過。 透明度の制御はタイマでマウスカーソルの現在位置を取得する方法でいったな。 時計だったからどのみち一定時間ごとに書き換える必要があったし。 まあ、一切マウスでの操作ができなくていいならそんな感じでいいんじゃね
>>111 なるほど、ちょうどこちらも描画しまくるタイプだったので、それで行けそうです。ありがとうございました。
(フックとか調べちゃったけどなんか上手くできる気がしてなかったので助かりました^^;)
CreateWineoExまじめんどくせえええええええええ お前らいつもこのめんどくささどう解消してる?
>>113 そんな関数使ったことないから分かりません。
115 :
113 :2009/12/06(日) 23:20:49
>>114 申し訳ありません
CreateWindowExです。
適当なGUIフレームワーク使っとけ
とりあえず CreateWindowExIndirect っつーありそうで無かった関数は自作してみた
考えてみたら、RegisterClassExはWNDCLASSEX構造体にセットするのに、 CreateWindowExは引数にセットって、なんか統一感無くて気持ち悪くないか?(*;;^^;;;;*
どれだけ頭が悪ければ気が済むんだろう?
Win32API に気持ち良さなんて期待しても無駄なので、あきらめてください
昔、某歌舞伎町に、覗き部屋という風俗があって、 窓から女の子の裸を覗くことが出来て、下には小さな 窓が。穴から万札を投げ込んから窓にティンポ を入れると気持ちイイことしてくれるって奴 これと似たところあるって? 決して無いよ。 大抵女の子じゃなくておばあさんで、ティンポも マイクロソフト状態を保ったままで速攻逃げ出すのが 常だった
今時Win32APIをベタ書きする人っているんだ・・・
>>122 今時って言うのが意味がワカラン、何が今時なの?
暮れも押し詰まったこの時期にってことじゃないかな
125 :
デフォルトの名無しさん :2009/12/07(月) 16:31:52
.NET時代って意味だろjk
Vista以降で新設された最近のAPIの情報って殆ど無いねぇ どこ見てもWin98の頃の情報ばっか 古いわ間違ってるわ全然役に立たないのに検索で上位に来てウザイ
Googleの検索結果って日付準とかできなかったっけ
日付が新しいからといって新しい情報とは限らないだろ
.NETはいちいちランタイムインストールを強要させるのが嫌だ
.NET2.0相当で作っとけばVista以降は何もしなくても動くだろ VC++だってダイナミックリンクにすればランタイムに依存するのは一緒
XPユーザーもまだ多いよ
そうですか死んどけ
XPなんて企業ユースとネットブックで残ってるだけだろ
それは無知ってやつだぜ 個人ゆーざーでXPのやつなんていくらでもいる
個人とかさらにどうでも良いよ
そんなお前がどうでもいいよ
お前だよお前
138 :
● :2009/12/07(月) 19:16:43
え?俺?
俺だよ俺!
.NETじゃランタイムの追加インストール不要!Windows95〜7まで全てで動作!とかのカコイイアプリが作れないからね
Win32sも忘れずになw
142 :
113 :2009/12/07(月) 21:47:31
おいおいおいおいおいおいおいVisual Studio2010 3月22日かよ MSDN会員期限2月までなんだけど死んで良いかな・・
一月くらい余裕あったろ。
>ランタイムの追加インストール不要!Windows95〜7まで全てで動作! Win32でそういうソフト作ってるがAPIの遅延ロードの山で大変だよ・・・
#define WINVER 0x400 #define _WIN32_WINNT 0 #define _WIN32_IE 0x200 こんな制限だと古臭いソフトしか作れんだろ
Win95くらいで自慢すんな。Win32sまでサポートしろ。
STRICTを定義するとハンドルの代入ミスなどが分かると知りましたが コンパイラ側でこの機能は実装されてはいないのでしょうか? STRICTを定義する手法については今知ったので、今まで作ったプログラムに そういったところで危ない記述がされているのではないかと不安です。
windef.hを見れば一目瞭然だけど、 NO_STRICTが宣言されていない限り勝手にSTRICTは定義される。 STRICTがどうのこうのというのはWin16時代の話じゃなかったかなあ。
VC6だろ
仕事でWinMain使ってゴリゴリやる案件ってある?
ゲームやパッケージソフトの開発
マルチスレッド化して超高速演算が求められるシミュレートなど
それに求められるのはmainであってWinMainじゃないような気がするなぁ
意外とあるんじゃないか。潜在的には。きびきびとした 動作のアプリ開発で本当に完成度を高めたいというので あればは未だVC6が最高と。(.NETは難しいので 発注者がリスクヘッジの為に必ずと言って良いほど Webアプリ版も作り、そちらのほうが開発の進捗が 解りやすいので、結局大抵ポシャる) ただVC6はただでさえ難しいC++のWindows版を 扱うわけで新参者が入れる世界じゃなくなってるし 新参者も激減してる。
VC6よりVC2008やintel c++の動作上だろ 最新cpuに対応しつつ、過去のcpu用コードも埋め込める。 過去用部分ですら、vc6を上回るだろ。
> 新参者も激減してる いらんツールから撤退してるだけ。vc6で可能なことはvc2008で出来る わざわざいらんツール使うのが変
もうVC6って11年前なんだな なんか感慨深い
WinMainから始まるアプリはまだある程度あると思うが apiをじかに呼び出しまくる案件はまずないと思う 基本的に仕事に求められるのがスピードと安定性だから 実績のあるベンダーのライブラリを使うことが多い 案件の応募条件にライブラリの実務経験が問われるくらいだから 大量のapiを覚えるよりライブラリの使い方を覚えたほうがいいのが実際のところ Advenced Windowsで覚えたapiもフリーソフトを作ったときには役に立ったが 仕事で役に立ったと実感したことはない
GUIやるのにHSPは簡単で優れていると思う。 これで開発してコードをC++にコンバート出来ればいいと思う。
HSPとかお呼びじゃ無いから学校でノベルゲー作ってろ
HSP使ってないやつは駄目だな。 これは開発効率良いよ。 コンパイルがC++コンパイラの50倍は速いな。 あと標準でいろいろincludeファイルが付いてて 中身もC++より記述が簡単で手を加えることも出来る。
軽さ追求のテキストエディタとかはまだ API でゴリゴリなんじゃないかな。
たとえばメニュー付きウィンドウがこれだけのコードでかける。
サンプル 拡張子はexe
http://kineko.dyndns.org/~touhou/up/source/up3156.jpg #include "mod_menu.as"
oncmd gosub *OnCommand, WM_COMMAND ; メッセージ割り込み
; サブメニュー作成
newmenu hfilemenu,1
addmenu hfilemenu, "開く(&O)", 1
addmenu hfilemenu, "終了(&Q)", 2
; トップメニュー作成
newmenu hmenu,0
addmenu hmenu, "ファイル(&F)", hfilemenu, 0x10
applymenu hmenu
stop
; メッセージの処理
*OnCommand
cmd=wparam & 0xFFFF
if cmd=1
dialog "メニューを選択しました。"
if cmd=2 {
end }
return
やっぱAPIでゴリる案件ってないんだね せいぜいWin版ゲーム関係だろうなぁ まあDirectXも絡むんだろうけど いやあ、仕事でそういうの無くって温くてつまらないんだよね…。 一度でいいから身震いするぐらいコアなwindowsプログラム組みたいな 趣味じゃなくて仕事でね
その程度ならIDE使えばコーディングする必要性すらねーな MessageBox(0,"aaaaa",0,0)だけ書ければOK
スレチ
APIで身震いするってのは少し変 内輪でも無い人間にはまともに相手できたものじゃない池沼さん 扱ってる位の感覚でよろ
なんでHSP厨が紛れ込んでるんだろう
虫の居所でも悪かったんじゃないか
gosubてw こんな馬鹿丸出しの言語よく使えるな
ていうかHSPは馬鹿しか使えない言語だから。
はいはいそろそろすれ違いでぷ
GUIだけはC#使っています。スレ違いでごめんなさい。でも楽です。 で、メインの処理やWin32APIが必要なところをC++でDLLで作る、いいとこ取りです。
.NETアプリは起動が遅いのとOffice2003の劣化コピーみたいなUIがイヤ
HSPのGUIは速いよ
しつけーんだよ
.NETアプリの起動は遅いね…。
そのうち早くなるって
.NETは極力.NETで閉じさせたほうがいいと思われ API混ぜるとロクなこと無いと
シフト演算(主に論理右シフトとか論理左シフトとか)のAPIってありますか? VB6にシフト演算の処理が無いみたいで
んなもの作らんで、配列に用意しておけばいいだろ Dim shr(65536) as integer,shl(65536) as integer for i=1 to 65536 shr(i)=i ¥ 2 next for i=1 to 65536 shl(i)=i*2 next とか(文法適当だからね)
183 :
181 :2009/12/09(水) 00:12:15
つまりシフト演算のAPIは無いから自分で作れってことですね・・・わかりました。ありがとうございました。
昔の名残で、RtlLargeIntegerShiftLeftとかある事はあるんだけどねえ。 WDKにしか載っていないような奴だし、そこでも既にObsolute扱い。
Int64ShrlMod32 Int64ShllMod32
VB6以外にゃ言語レベルで備わってるものをわざわざAPIとして用意する意味ないし無くて当然でしょ 加減乗除のAPIはありますか?と同レベル
一部のAPIはC言語のマクロを含むのでC開発者向けに「ある」としても それがVBで使えるとは限らない。APIという用語が拡大解釈されて久しい
189 :
デフォルトの名無しさん :2009/12/09(水) 11:34:48
Imm関連の質問なのですがこちらでもよろしいでしょうか?
どうでしょうね?
メッセージとAPIだしいいんじゃね
独自フォーマットのファイル(拡張子を仮に.xxxとします)の内容を表示する ビューワアプリを作っています。 仕様としては、 A: 対象ファイルをアプリexeにD&Dする B: .xxxファイルをビューワアプリに関連付けして、ダブルクリックする AあるいはBの操作によって、ビューワアプリはWinMain関数のコマンドライン引数の ファイルパスを見て、それをオープンし、内容を読み取り・表示する、という算段です。 Aに関しては動作するようにできましたが、 Bに関しては、うまく動作してくれません・・・ MessageBoxを使って、ファイルオープン直前に、ファイルパスがどのようになっているかを 表示させてみましたが、Aの時と同様、何ら問題がありません。 AのケースとBのケースとで、Win32apiレベルの違いは何かあるのでしょうか? それをヒントに原因究明と対策を考えたいと思います。 よろしくお願いします。 m(_ _)m
パスに空白が含まれてるとかそんなの? hoge.exe "%1" って登録してある?
194 :
192 :2009/12/09(水) 20:58:00
>>193 いえ、試したパスには空白は含まれていませんでした。
>hoge.exe "%1" って登録してある?
すみません、"%1"とはどういうことでしょうか??
登録というのは・・・??
分からないことばかりですみません。
じゃ、違うね。 関連づけすると、レジストリにそういう風に登録されるのよ。 たまに、ダブルクォートが付かない形で登録されてて、空白を含むパスで動かないと。 うまく動作しない、ってことだけど、その辺もう少し具体的に説明したほうがいいよ。
196 :
192 :2009/12/09(水) 21:37:15
>>195 そういうことでしたか。
ありがとうございます。
うまく動作しないということの詳細ですが、
表示はDirectXのAPIを使って行っています。
その表示が初っ端から出てこず、Windowのグレーの背景のままで、
アプリが固まって操作を受け付けなくなります。
こうなると、タスクバーで右クリック->「閉じる」とするか、タスクマネージャで終了を指示するなどして、
強制終了させるしかなくなります。
ファイルの読み込みはwhile(1)でまわして行い、区切りのトークンが得られたらbreakで
抜けるようにしています。
やはりファイルの読み込みがうまくいかず、そのwhile(1)から抜けられないのでは・・・
明日、会社でもうちょっと調べてみます。
VC++上でデバッグできないので、しんどいですが・・・ orz
うーん。IDE 上のデバッグで引数与えても起きないんだよね? 一緒のはずなんだけどな。
こういう時は伝統のログファイルだな。 うっかりバッファリングで吐き出し損ねないように注意。
バグは、夜遅くまで悩んでても時間の無駄 明日の朝になればあっさり解決! と言うパターンになりそうだな
200 :
192 :2009/12/09(水) 22:14:37
>>197 はい、IDE上のオプションで引数を与えてシミュレーションして確認しましたし、
ファイルをアプリにD&Dしての起動ではうまくいっています。
関連付けでファイルダブルクリックでもいっしょですよね・・・
(引数も同じものがきているのを確認していますし)
>>198 なるほど。
ログファイル出力も検討します。
>>199 そうなることを期待しますw
引数受け取る部分のソース上げれば速いがな・。 コードの問題か、他所かは判明する。
自分もそういう経験があった気がする。 ロング、ショートとか。括弧の有無とか。 DDのときだけ違う形式とかあるな。
自分はおさげが好きです。
たぶん絶対パスと、カレントにないのに勝手にカレントとして 送ってるとかだろ。
>WinMain関数のコマンドライン引数の これがバグの元 コマンドライン引数は__argcと__targvで解釈しないとうまくいかないよ
引数名は関係ないだろ。 cとvでも良いし。 観衆でしょ。
__argcと__targvはCRTのグローバル変数だろ。 そんなことすら分からない頭の悪さはどうしようもないな。
そうなんか
SDK プログラミングで ActiveX コントロールを使うにはどうすればいいですか?
素直にATL使っとけ
COMの仕様に沿って利用する
サービスのプログラムからSH系のAPIって呼んでも大丈夫でしょうか? シェルっていうくらいだからなんかExplorerとかに依存してるか、ないのかなとか? サービスはExplorerより先に起動しますし。
>>192 関連付けの時にDDEを使うにチェックが入ってるとかは?
関係ない?
もしかしたらC++の質問かもしれないけど Aというクラス内でウィンドウを作成し、他にクラスBがある クラスBは、クラスAのインスタンスは知らないけれど クラスA内で作成されたウィンドウのハンドルは知っている 以上の条件で、クラスBからクラスAのインスタンスを取得 する方法はないだろうか?
無い
ウインドウハンドルとインスタンスを関連づけるデータを別に持っておけばいい。
SendMessage でやりとりすればできたりするかも よくわかんないけど。 独自のメッセージって遅れるのかな
SendMessageしてthisを返してもらう
SetProp使えよ
>独自のメッセージって遅れるのかな この程度で無理に回答しなくていいよ。
ATLはコントロールIDをキャストしてインスタンスが取れるようになってるな なんて無茶苦茶な・・・
>>192 コマンドライン引数文字列の文字セットで W と A の差に嵌っているとか?
>>192 関連付けの仕方が間違ってるとか無い?
フォルダオプションとか開いて確認してみたの?
>>205 が答えだろ
WinMain関数第3引数を使うのが悪い
GUIプログラムならDDE通信
WinMain関数の引数って全部無くていいよなw
VC6 のエントリーポイントそのものは 引数無しだしな そこでがんばって WinMain の引数作って WinMain 呼び出ししてる (CRTEXE.c / mainCRTStartup)
DDE通信って何だ?
HINSTANCEは__ImageBaseから取得できるし コマンドライン文字列は__argcと__targvで良いし ShowWindowにはSW_SHOWDEFAULTで良いし 4つも引数あるのに全くもって無用の長物だよなw
Microsoftは無駄が好きなんです
>>229 ウィンドウメッセージを使った他アプリケーションとのデータ交換
233 :
デフォルトの名無しさん :2009/12/10(木) 16:06:34
スクリーンキーボードのような動きをするウインドウを 作るのって簡単でしょうか?
234 :
デフォルトの名無しさん :2009/12/10(木) 16:09:57
とてもとても難しいです
スクリーンキーボードはウィンドウズの非公開技術によって作られています
JavaScriptとHTMLでA,B,C,D...とかついたボタンをクリックすると テキストエリアにその文字が追加されていくようなプログラムって 非公開技術なの?(やさしいHTMLとかいう名のエロ本で読んだことあるような..)
おしっこだけしたいのにおならが出ちゃうのと同じ技術 うんこだけしたいのにおしっこも出ちゃうのとは少し違う
任意のアプリのキー入力情報を書き換えるプログラムが 公開技術なわきゃないだろ
カレントのアプリケーションってことにすると スクリーンキーボードをクリックしたらカレントがスクリーンキーボードに移るから 一つ前にカレントだったアプリケーションを記憶しておき それにSendKeysで文字送ればええんとちゃう?APIいらなくない?
keybd_event SetKeyboardState SendInput
?
!
ああ無情
呼んだ?
そのHTMLをIEでオープンしてるとは限らないだろ。
わざわざ作らなくても最初からMS-IMEについてるし、他にもソフトが出回ってると思う。 自分で作る前に既存のものを研究しとけ
別に DOM は IE だけの技術じゃないわけだが。
251 :
192 :2009/12/10(木) 21:49:51
解決しました! ・やはりファイル読み込みのwhile(1)ループでハマってしまっていた ↓ ・CreateFile関数の戻り値を調べると-1(失敗)に ↓ ・GetLastErrorでエラーの意味を取得すると123が得られた ・意味は「ファイル名、ディレクトリ名、またはボリューム ラベルの構文が間違っています」 ↓ ・CreateFileに与えるファイル名を改めてよく見てみると・・・ なんと、ダブルクリックで開いた場合は、パスが""で囲まれていて、 その他D&D等、成功していたときは囲まれていなかった! (昨日は動揺のためか、気付けなかった・・・ orz) ↓ ・""を取り除いて与えるようにしたら、ダブルクリックでも正常動作!感動した! ということでした。 何でダブルクリックで開いたときは""が付くんでしょうね^^; みなさん、たくさんのアドバイスを下さってありがとうございました!
いや、だから、レジストリでそういう風に登録されてるんだろ?
D&Dとかでも、パスに空白を含んでいたらクォートされると思うぞ。 CommandLineToArgvWでも使っとけ。
LCMapStringで半角→全角変換するとき\だけ半角のまま・・・ \以外にも全角変換できない文字ってあんのかな?
>>251 だから__argcと__targvを使えと散々出てるだろが
どうせ今度は複数ファイルをD&Dした時にハマって質問するんだろ
ファイルオープン失敗してるのに無限ループに突入しちゃうプログラムてどうなのよ
>>256 if(INVALID_HANDLE_VALUE == CreateFile(...))
{
while(1);
}
>>257 成功したハンドルはどこにも保存しないのか
>>258 if(INVALID_HANDLE_VALUE == CreateFile(...))
{
while(1);
}
else
{
int i = 0;
while(++i)
{
CloseHandle((HANDLE)i);
}
}
無差別に閉じんなよwww
DLLとの引数や返り値のやり取りの件なんですけど 1:アロケータ・デアロケータを公開してPOD構造のみでやり取り(C) 2:1に加えてインターフェース・生成関数・破棄関数をセットでやりとり(C++) これでとりあえず間違いは起こりませんよね?
COMみたいにReleaseを呼んで参照カウンタがゼロになったら開放しとけ
263 :
192 :2009/12/11(金) 18:44:05
すみません、ご指摘通り、__argvを使って難なく処理できました。 ありがとうございました。
WinMainとWinProcでデータを共有したいと思ったらグローバル変数とか使わないとだめ? WinProcにパラメータで渡す方法とかないんだろうか
ウィンドウに対してデータを関連付けて、WinProcのHWND引数から取り出す。 SetPropとか。
SetPropというのがあったのね知らなかった。ありがとう
それってSetWindowLongとは違うの?^^
違わない SetWindowLongでGWL_USERDATA渡したときと一緒
え? 違うよバカ。 MSDN読めハゲ。 そして死ねよクソブタ。
ども。サンクスです^^
SetPropは値にアトムか文字列を紐付けられるので複数の値を保存できる SetWindowLong+GWL_USERDATAだと保存できる値は1個だけ
ATOMっていまいち意味わからないんだよね。 MSDNのどこを調べても抽象的な説明ばかり…
アトムテーブルに文字列や識別子を登録した際に返される16bit値がアトム。 ……とAtomsの所に思いっきりベタに書いてあるように見える。 で、この値からは逆に文字列等を取り出すことができる。 ちなみにアトムテーブルの特徴として、同じ文字列や識別子を二つ以上は追加できず、 追加しようとした時は以前登録した時のと同じアトムを返す、というのがある。
WM_CREATEのとき、CREATESTRUCTのlpCreateParamsに WinMainと共有する変数のアドレス渡してWndProc内のstatic変数にそのアドレス 保存するってのは?
275 :
デフォルトの名無しさん :2009/12/12(土) 02:27:45
あるウィンドウのスクリーンショットをクリップボードにコピーして、 PowerPointに貼り付けるVBAコードを作ってます。 下記のkeybd_eventを使って、出来たのは出来たのですが、 たまに画面全体がコピーされることがあり、Sleepを入れて対応せざるおえません。 Call keybd_event(VK_LMENU, &H56, KEYEVENTF_EXTENDEDKEY Or 0, 0) Call keybd_event(VK_SNAPSHOT, &H79, KEYEVENTF_EXTENDEDKEY Or 0, 0) Call keybd_event(VK_SNAPSHOT, &H79, KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP, 0) Call keybd_event(VK_LMENU, &H56, KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP, 0) 貼り付ける枚数が多いので、PrintWindowの勉強をして 処理を早くしたいと思ってるのですが、 以下のコードだと、クリップボードにデータが入っていない様です。 ご教授頂けると助かります。宜しくお願いします。 hOwner = GetDesktopWindow() hdc = GetDC(hOwner) hClipDC = CreateCompatibleDC(hdc) hBit = CreateCompatibleBitmap(hdc, 845, 553) hOldBit = SelectObject(hClipDC, hBit) Call PrintWindow(|コピーしたいウィンドウのハンドル|, hClipDC, 0) Call OpenClipboard(0) Call EmptyClipboard Call SetClipboardData(CF_BITMAP, hClipDC) Call CloseClipboard ・hBitまでは成功している様に見えるのですが、 hOldBitには0が返されます。 ・Call PrintWindowの時は、Trueが返されます。
SetClipboardDataで第一引数にCF_BITMAPを指定したとき 第二引数には何を指定すべきか調べよう
MSDNは英語版読めよ
残念ながら、そのとおりだな。 日本語版MSDNは穴だらけ。
>>275 OpenClipboardのhwndにNULLを渡した時は、
EmptyClipboardでクリップボードのオーナーがNULLが設定され、
その結果SetClipboardData呼び出しは失敗する。
と書いてあるな。
FindWindowか何かでPowerPointのメインウィンドウハンドルを取得して、
そいつを渡してやればいいんじゃないか?
バージョンに拠っては、既にプロパティとして用意されているかもな。
>>275 指定のフォルダにファイル保存できるスクリーンキャプチャソフトがあるだろ。
そいつを使ってスクリーンショットを次々に保存していって
後でそのフォルダの画像ファイルを一括してPowerPointに貼り付ければいい。
SetClipboardViewer APIを使って簡単なクリップボード拡張プログラムを作ってます 初回起動時にクリップボードの内容が取得できないことがあります わかっているのはファイル名を指定して実行でCLIPBRD.EXEを起動後にソフトを起動したら正常に内容が取得できます クリップボードチェインが取得できないときはMessageBox APIでエラーを通知するようにしているのですがエラーも出ないで起動するときがあります クリップボードの中身はテキストなのですが、クリップボードの内容が取得できない原因として何が考えられますか?
282 :
281 :2009/12/12(土) 20:03:40
ソースはこんな感じですが case WM_CREATE: memset(szBuffer, '\0', sizeof(szBuffer)); hNextWnd = SetClipboardViewer(hWnd); if(hNextWnd) MessageBox(hWnd,"Viewer Hanle Error","Error",MB_OK); GetClientRect(hWnd, &rc); hEdit = CreateWindow( "EDIT", NULL, WS_CHILD | WS_VISIBLE | ES_WANTRETURN | ES_MULTILINE | ES_AUTOVSCROLL | WS_VSCROLL | ES_AUTOHSCROLL | WS_HSCROLL, 0, 0, rc.right, rc.bottom, hWnd, (HMENU)ID_EDIT, hInst, NULL); SendMessage(hEdit, EM_SETLIMITTEXT, (WPARAM)1024*1024, 0); if(OpenClipboard(hWnd) && (hg = GetClipboardData(CF_TEXT))) { strText = (PTSTR)GlobalLock(hg); strcpy(szBuffer, strText); Edit_SetText(hEdit, szBuffer); GlobalUnlock(hg); CloseClipboard(); } break;
Hanle Error
クリップボードに sizeof(szBuffer) を超える文字列をセットしたら 簡単にバッファオーバーランできるぞw
285 :
281 :2009/12/12(土) 21:12:23
d
>>283 ハンドルエラーですか
GetLastError()で探ってみますね
>>284 私的に使うので問題ないですよ
まだ完成ではないので問題があったら修正しますね
"Hanle"に突っ込んだだけだろ馬鹿w
CLIPBRD.EXEってWin98のクリップボードビューアのことか? 凄い環境で開発してるんだな
288 :
281 :2009/12/12(土) 22:10:57
>>287 開発環境はNT4.0/VC++5.0です
CLIPBRD.exeはXPでも動作しますよ
互換性を考えてC言語で作ってるのですが
OS付属のプログラムを他のOSに持って行ったらライセンス違反ですよ
バッファオーバーランする糞コードを平気で書いてるぐらいだから どうせ他の部分でもトチ狂ったコード書いてるんだろ
291 :
281 :2009/12/12(土) 22:21:44
>>289 いあ、実際試してみろって、ライセンスとか問題じゃないから
CLIPBRD.EXEが動くの俺だけなのか?
292 :
281 :2009/12/12(土) 22:23:01
ちなみにXP Proだけど
> ライセンスとか問題じゃないから 死ね
ウザイから放置で
チェックボックスに対してBS_ICON属性を指定し そのチェックボックスにアイコンを表示させてるものを作っているのですが このときアイコンのサイズとチェックボックスコントロールの縦と横サイズを 自動で計算して合わせるのに有効なやり方などはありますか? CreateWindow時に固定でサイズを指定するやり方は なんとなくナンセンスな気がするので教えていただきたいです。
BCM_SETIMAGELISTとBCM_GETIDEALSIZEでどうにかなるんじゃね?
297 :
デフォルトの名無しさん :2009/12/13(日) 11:17:01
>>295 RECT rc, rcClient;
SIZE siz, siz2, sizClient;
GetWindowRect(hWnd, &rc);
GetClientRect(hWnd, &rcClient);
siz.cx = rc.right - rc.left;
siz.cy = rc.bottom - rc.top;
sizClient.cx = rcClient.right - rcClient.left;
sizClient.cy = rcClient.bottom - rcClient.top;
siz2.cx = (...) + (siz.cx - sizClient.cx);
siz2.cy = (...) + (siz.cy - sizClient.cy);
SetWindowPos(hWnd, NULL, 0, 0, siz2.cx, siz2.cy, SWP_NOMOVE | SWP_NOZORDER);
//dll.cpp #include <windows.h> extern "C" { __declspec(dllexport) void CALLBACK hello(void){ MessageBox(0, "hello", "world", MB_OK); } } //main.cpp #include <windows.h> typedef void (CALLBACK *hello_func)(void); int main(void) { HMODULE module = LoadLibrary("dll.dll"); if(!module) { MessageBox(0, "LoadLibrary", "Error", MB_OK); return -1; } hello_func hello = (hello_func)GetProcAddress(module, "hello"); if(!hello){ MessageBox(0, "GetProcAddress", "Error", MB_OK); FreeLibrary(module); return -1; } hello(); FreeLibrary(module); return 0; } GetProcAddressのところで失敗してしまいます。何が問題なんでしょうか?
ちゃんとエクスポートされてるか確認したのか?
GetLastError() って便利な関数があってだな・・・。
CALLBACKといことはstdcallだから、hello@0という名前でエクスポートされてるのでは?
まずはDependency Walker使ってみようぜ
漢は黙って dumpbin /exports だ。
305 :
298 :2009/12/13(日) 13:43:41
レスありがとうございます dumpbinを使ってみたところ_hello@0という名前になってました ゲームエンジンプログラミングという本のサンプルだと関数名そのままで扱っていたのですが・・・これは本が間違ってるんでしょうかね?
>>305 その本は知らないけど、コンパイラがBCCの奴じゃないかな。
ネットで調べたら、BCCだと__stdcallを同名でエクスポートするって情報があった(VCしか知らないので逆に驚き)。
VCだとdefファイル作成して
EXPORTS
hello=hello
とでもしないと同名ではエクスポートできなかったと思う。
APIは問題なかったみたいね。
>>304 これいいね。
ShellExecuteすると特に終了待ちするわけでもないのに アプリが起動して入力受け付けるまで(かどうかはよくわからないけど) 呼び出し元のアプリがフリーズしてしまうんだけど サブスレッドから呼ばない限りブロックされるのを防ぐ方法ってないですかね。
308 :
デフォルトの名無しさん :2009/12/13(日) 17:35:43
275です。みなさん、ご回答をありがとう御座います。
大変勉強になります。
しかしながら、未だ解決出来ずにいます。
なんとか、PrintWindowを使って、クリップボードにBitmapを入れたいので、
ご教授をお願いします。
成功が望めるなら、BitBltを使ったやり方でもいいです。
こっちでもうまくいってません。
>>276 冷静な回答をありがとう御座います。
CreateCompatibleBitmapしたオブジェクトのハンドル hBit で実行して、
うまくいかなかったので、色々試して(初心者なので)いて、
そのうちの間違ったままのソースを載せてました。
>>279 PowerPointのハンドルでOpenClipboardするということでしょうか?
その認識で試してみましたが、どこか違う様です。
>>280 以前はそれに近い方法で運用していましたが、
クリップボードから貼り付ける方法の方が早いので、
今のソースコードを完成させたいと思っています。
新しい情報です。
・SetClipboardData(CF_BITMAP, hBit)で実行したところ、
データのハンドルは返されています。
・IsClipboardFormatAvailable(CF_BITMAP)で確認しても、
NULLが返されます。
#define DEBUG_API(expr) \ {if(!(expr)){ _tprintf(_T("%s failed, ::GetLastError()=%#lx\n"), _T(#expr), ::GetLastError()); __debugbreak();}} if(HWND hTarget = FindWindow(_T("Notepad"), NULL)){ // hTarget = ::GetDesktopWindow(); RECT rect; DEBUG_API(::GetWindowRect(hTarget, &rect)); HDC hdc = ::GetDC(hTarget); HDC hClipDC = ::CreateCompatibleDC(hdc); HBITMAP hBit = ::CreateCompatibleBitmap(hdc, rect.right-rect.left, rect.bottom-rect.top); HGDIOBJ hOldBit = ::SelectObject(hClipDC, hBit); // hTargetがデスクトップだとPrintWindow()が失敗する。理由は知らない。 DEBUG_API(::PrintWindow(hTarget, hClipDC, 0)); // ::GetLastError()は意味なしっぽい。 DEBUG_API(::OpenClipboard(NULL)); DEBUG_API(::EmptyClipboard()); DEBUG_API(::SetClipboardData(CF_BITMAP, hBit)); DEBUG_API(::CloseClipboard()); ::SelectObject(hClipDC, hOldBit); DEBUG_API(::DeleteBitmap(hBit)); DEBUG_API(::DeleteDC(hClipDC)); DEBUG_API(::ReleaseDC(hTarget, hdc)); return ::IsClipboardFormatAvailable(CF_BITMAP); } return FALSE; 上の検証コードでIsClipboardFormatAvailable()はゼロ以外を返したよ。 ::GetDesktopWindow()のハンドルが指定できるか調べてみれば?
RegisterHotKey で登録したホットキーを経由して、別ウィンドウがアクティブでも 音楽再生アプリでのplay/stopをしたいと思ったのですが、 nProtectGameGuardのオンラインゲーム上では登録したホットキー使用が不可能でした。 不正行為防止用にそうなっているのは予想が付いたのですが、 他のホットキー登録の方法、代替APIなど有りませんか?
そんな特殊な人のため用にわざわざ代替API用意するほどMSがお人よしだと思ってるの
思ってるから聞いてるんです。知らないならレスしないで下さい。
ローレベルフックでもすれば?
またオンラインゲームをチートしたい馬鹿が質問してるのか
315 :
310 :2009/12/13(日) 21:26:42
>>312 は私ではありません
>>313 やはり、ローレベルフックしか無いですよね・・・勉強してきます
>>314 やろうと思えば出来るのでしょうけれど、アングラな世界には入りたくないですね。
と言った所で無駄でしょうね、そう思うならそう思っててください。
ローレベルじゃない普通のフックとか、フィルタドライバ書くとか、 他にもいろいろあるよ。
単純にタイマー廻してGetAsyncKeyStateなんかは?
どうせ nPro上では無理でした、代替APIなど有りませんか? で無限ループだろ
319 :
310 :2009/12/13(日) 23:08:22
フィルタドライバでどうやら実装出来そうです ありがとうございました
あら本気?
フィルタドライバが入っていることを認識されてあぼ〜んてオチじゃね?
結局チートが目的だったようだ
>>321 以前友人が書いていたコードを流用して、
取りあえずフィルタドライバを通して起動してみたところ正常に動作しました。
>>322 何を言っても無駄なようですね、別に構いません。
nProをすり抜けようとする行為自体、nProが望む行為じゃないんでしょうからね。
まあそりゃあね nPro自体行儀いいもんだとも思わないけど
Win32APIってC#で使えますか?
P/Invoke
はい。
一々宣言しないといけないから糞面倒だけど使える
めんどくさかったらpinvoke.netからコピーして来るのが手軽
C#で、他に起動してある特定のアプリウィンドウのタイトルテキストを変更したいのですが、 APIでその動作は可能ですか?
そろそろ誰かwindows.csにまとめてくれ
可能だからC#スレで聞いてくれ。
DirectXとか無しでWinAPIでゲーム作ろうとしたら WinProcは生成と破棄のみ、入力・更新・描画はメインループで という形で十分ですかね? それともメインループでは更新と画面無効化だけ、キーボード入力と描画はプロシージャで〜みたいな感じにした方がいいんでしょうか?
前者がよろしいかと
おれも前者推奨
前者だな
レスサンクスです DxLIBとかしかやってこなかったんでプロシージャみたいな設計だと戸惑ってしまいまして 今まで通りのやりかたでいいみたいですね
ゲームは別スレッドでループした方がいいんじゃないの? 作ったことないけど
GDIはスレッドセーフじゃないから無闇にマルチスレッド化しない方がいいのでは?
ファイルハンドルなどはアプリケーション終了時に解放し忘れても OSが後片付けしてくれますが、MSDNのDestroyMenuの項に >アプリケーションを終了する前に、DestroyMenu 関数を使って、 >どのウィンドウにも割り当てられていないメニューを破棄しなければなりません。 と、書いてあるので、メニューハンドルだけは例外で もしかして破棄しないままアプリケーションが終了すると OSにすら回収不能なメモリリークになるのですか?
>>339 スレッドセーフに作られているがいったい何を言っているんだ?
はい よく気付きましたね
利用中に削除したら問題が起こるのはスレッドセーフ以前の問題だろ。 それを言ったら同期用のオブジェクトですら、使用中に削除したら問題が起こるだろ。
起こらねーよ馬鹿 何のための参照カウンタなんだよ
馬鹿でも理解できるように削除を例にしたMSの配慮が裏目に
まとめるとこんな感じ。 Cのランタイムでマルチスレッドを選択しました。 ファイルをオープンしました。 別スレッドを開始しました。 ファイルをクローズしました。 別スレッドでファイルにアクセスしようとしました。 エラーが出ました。 スレッドセーフじゃねえよ、このやろう。
名前 速度 プロセス間 リソース カウント機能 プラットフォーム クリティカルセクション 高 なし なし(排他アクセス) 95/NT/CE ミューテックス 低 あり なし(排他アクセス) 95/NT/CE セマフォ 低 あり あり 95/NT イベント 低 あり あり* 95/NT/CE メータードセクション 高 あり あり 95/NT/CE
何のためにDuplicateHandleがあるんだよ どれだけ頭が悪ければ気が済むんだろう?
>>349 SRWLockとかOne-Time InitializationとかCondition variableとかも追加よろ
DuplicateHandleを使うなら、HDCなら個別にGetDCをすればいいということになるだろ。
ならない DuplicateHandleとGetDCでは全然意味が違う
STAとMTAの違いを分かってない馬鹿は黙っとけよ・・・
参照カウンタがスレッドセーフの条件だと思っている時点で阿呆としか言いようがないんだが、頭は大丈夫か?
誰もそんなこと言ってねーだろ 日本語も読めないのか
ウインドウハンドルも参照カウンタを持っていないが、 スレッドセーフの条件から外れるんだよね。 単一スレッド以外からのウインドウ操作は以ての外。 ましては別プロセスからいじるなどあり得ない。
>>357 当然だろ。
あるスレッドでwhile(hwnd=GetWindow(hwnd...))のループ中に
別スレッドで弄ると無限ループする可能性がある。
この口調は前スレの最後で論破されてた馬鹿だなw 間違いない 相変わらずの無知っぷりでワロタw
>>358 当然ときたか、ボロを出しまくりだね。
つまり現在目の前に描画されているウインドウシステムは幻想なんだね。
何のためにウインドウメッセージがあるのかまったく理解していない。
まーた得意の話題逸らしが始まった まずは「GDIスレッドセーフに作られている」のソースを提示しろよ
362 :
デフォルトの名無しさん :2009/12/15(火) 08:10:37
朝から元気だね おまえらってフリーランサーのプログラマー?
>>358 ヘルプにEnumChildWindows使えと書いてあるだろ。
そんな事は分かってるんだが
シングルスレッドでも破棄したリソースを使おうとすればエラーになるのに、 何でマルチスレッドのせいになっているんだろう?
バカはほっとけよ どうせ前スレの >.NETはWindows以外でも利用可能 みたいにうやむやにして逃げるだけだろ。
Windows7以前はGDIを複数のスレッドから同時にアクセスするとロックが発生して処理速度が低下、 以降では改善されて平行に動くという話はOK?
そんな話関係ないから
369 :
デフォルトの名無しさん :2009/12/15(火) 08:24:20
話が高度すぎて初心者の俺にはついてゆけん
何のためにロックしているのかというのは、関係ないのか。 都合がいいなあ。
ちゃんと読めよ GDIオブジェクトがスレッドセーフでないという話とは全く関係ない
自演?
GDIをマルチスレッドで使う場合というと、メッセージループを回しつつ、 描画処理が別スレッドで動いている場合だよね。 描画用のスレッドでGetDCをしていらなくなったらReleaseDC、 そしてウエイトが入るような形になるだろうけど、 この場合どこに問題が起こるのかが重要。
COMでいうところのSTAとMTAを理解していれば
>>343 のリンク先に書いてある事が理解できるはず。
もう少し勉強しましょう。
>>374 >GDIはスレッドセーフじゃないから無闇にマルチスレッド化しない方がいいのでは?
きっとメインスレッドからHDCを消し飛ばすんだろ。
常人にはさっぱり理解できないが。
ゲーム機のサウンドのように音楽を途切れなく無限ループするにはどうすればいいの? プログラムサウンドって奴?直接音源操作するにはどうすればいいんだろうなぁ・・・
378 :
デフォルトの名無しさん :2009/12/15(火) 14:12:34
常人(笑)
379 :
デフォルトの名無しさん :2009/12/15(火) 15:05:25
>>377 環境と開発言語がわからんと何も言えんが
>377 自分でやるなら、ダブルバッファリングして波形データを送り続ける。
DirectX
SendInputで複数のキーを同時押ししたようにしたいのですが、 どのようにすればいいのでしょうか?
>>382 SetKeyboardState
これで調べるのはだめでしょうか?
DLL内の関数で、コールバック関数とそうでないものがあるのですが、これらの違いは何なのでしょうか? 両方試しましたが、これといった違いが分かりません そもそもコールバック関数とは、どういった場面で使うのでしょうか ユーザーが独自にコールバック関数を作ってもいいのですか?
コールバックってのは、呼び出してもらう関数だよ? EnumWindows() に対する、EnumWindowsProc() みたいな。 なんか勘違いしてるんじゃない?
つくづくなんにもわかってないバカだな・・・。
じゃ、あきらめろよ。
まず 「一般的な意味のコールバック関数」 と 「CALLBACK呼び出し規約の関数」 を区別することから始めるべき
390 :
384 :2009/12/15(火) 17:32:21
#include <windows.h>
int WINAPI DllMain(HINSTANCE, DWORD, PVOID) {return TRUE;}
#define EXPORT extern "C" __declspec(dllexport)
EXPORT void Func1(void) {/*...*/}
EXPORT void CALLBACK Func2(void) {/*...*/}
DLL作成について解説しているサイトで、上のように呼び出し規約のあるものとないものが見受けられました
これらの違いについての質問でした
>>385 呼び出される、呼び戻されるという意味がいまいち……
>>389 コールバック関数の実装法が複数あると言うことでしょうか?
コールバック関数ってのは ユーザーが指定の書式に乗っ取ってその関数を書いてその関数ポインタを Win32APIの引数に渡してその中からコールバック関数を呼び出してもらうような使い方をする。 というか何のためにその知識を得たいのかを書いたほうが手っ取り早い悪寒…
CALLBACKの#defineを確認してみろよ。
とりあえずEnumWindowsなりEnumFontsなりのサンプル書いて試してみりゃ なんとなくわかるだろ
CALLBACKについては環境にもよるけど書いてあっても無くても同じ あったりなかったりするのは何をする関数か読む人にわかるように付け足してるか、 どっかからコピペしただけかどっちかだろう。
395 :
384 :2009/12/15(火) 17:47:03
>>391 目的は、DLL内の関数をコールバック関数にすべきかどうかの判断です
ウィンドウプロシージャ等、用意されてあるものについては触れたことがあるのですが、
独自の関数では、どういう場合にコールバック関数にすべきかと
>>393 MSDNライブラリ見てみます
すでにキーワードとして出てるけど、「呼び出し規約」について調べてみような。
VCなら右クリックして定義を参照すればわかるけど__stdcall だったり空だったりするぞ
398 :
384 :2009/12/15(火) 17:53:27
WINAPIやCALLBACKが__stdcallなのは知っていましたが、形式的に使っていただけでした この機会にちゃんと調べてみます
>>395 例えば
DLLの関数を呼ぶと勝手に処理はじめて
その進捗状況を教えてくれる
てのは?
DLLとDLL呼び出し側でデフォルトの関数の呼び出し方が違うかもしれない ↓ DLLからDLL呼び出し側(逆も)の関数をポインタ経由で呼び出すときに呼び出し規約が違うとバグるかも ↓ 仕方が無いので明示的に呼び出し規約を指定する 俺はこういうふうに考えてるんだがいいんだろうか?
呼び出し規約を明示するのはいいけれど、 コールバックでないものにCALLBACKと書くのはいかがなものか WINAPIとかの方がいいのでは いやまぁWinAPIじゃないんだけどさ じゃあ #define OreOreAPI __stdcall あたりでどうよ
C/C++使ってる限りてきとーでいいよw
x64移行しようぜ
スタックポインタを呼出元が戻すか呼出先が戻すかの違いだろ。
pascalとcdeclのいいとこ取り
コンパイラオプションに/Gzを追加しとけ
APIのコールバック関数は呼出規約が間違ってても動作上問題ないので気にしなくていい と言ってみる
APIのコールバック関数は呼出規約が間違ってても動作上問題ないと思われるので、気にしなくていい
冗談はよしこさん
問題が起きないようにAPI側で対策してあるんだよ。凄いでしょ。
じゃあ自作DLLだとちゃんと動かないんだ?
こんなコードでも一応動くのなw int __cdecl main(HWND h,int u,int w,long l) { extern int __ImageBase; static ATOM a; WNDCLASS c={0,(WNDPROC)main,0,0,&__ImageBase,0,0,6,0,1}; if(a)return(u-2)?DefWindowProc(h,u,w,l):exit(0); else if(CreateWindow(a=RegisterClass(&c),0,537<<19,0,0,99,99,0,0,0,0)) while(GetMessage(&c,0,0,0))DispatchMessage(&c); }
>>413 釣りかと思ったら本当だった
わろすwwwww
>>413 超有名人に晒し上げしてもらえるとはw
羨ましい奴めwww
何が面白いのか教えて。 元から古いとか誤りが多いとか言われてた気がするんだけど。
関数ポインタをキャストするのはキチガイの所業
>>417 それが分からんうちはあんたも素人だ
それなりにまともな開発実績積めば
自ずと答えに辿り着くぜ
>>418 EM_SETWORDBREAKPROC とかは?
キャストは避けられないがwindowsx.hのEdit_SetWordBreakProcマクロを使え
嫌だ
ListCtrlでレポートビューで表示してますが 1項目の値が大きくて入りきらなくなりお尻に”…”がつきます 例) 表示したい項目はABCDEFなのに 下のようにDまで表示され後は…です ------- ABCD...| ------- これを改行して表示したいのですが オーナードローとか使わずに簡単にできませんか? ------- ABCD | EF | -------
オーナードロー使わないとダメだと思うけど あれめんどうだよな
一度書いてしまえばいいんだから最初から避けなくてもいいのに
427 :
424 :2009/12/17(木) 16:03:41
ありがとうございます 無理そうなので枠をひろげることにしました それで次の質問なんですが 1000という数字をprintfとかで1,000と表示する簡単な方法ありませんか? 1000未満ならカンマなし、1000以上なカンマつけるとか 判定してもいいのですが100万こえるとまた判定いりますし ここは何か関数(API)とか用意されてませんか?
GetCurrencyFormat
GetNumberFormat
430 :
424 :2009/12/17(木) 16:21:23
ありがとうございます あるもんですね 難しそうですがヘルプ参照してみます
>428,429 そんな便利なAPIがあったんだ。 今まで自分で作ってた...orz
NLSは意外と便利な機能が多いからな。 普段扱わないロケールとか出てくるから、 どうしても難しそうに見えるんだよなあ。
NLSを調べようとしたつもりが なぜかアダルトグッズサイトでオナホールを探していた。 何をいってい(ry
わかるよ・・・
立方メートルと入力して変換すると出てくるこの文字ですが ↓ ? 3がつぶれて醜いです フォントを26とかの大きさにしたらいい感じになりますが 12とかのサイズではつぶれてて醜いです これはプログラムではどうにもなりませんか? 綺麗なフォントとかあるんでしょうか? DrawTextとかでmと3を分けて書くしかないのでしょうか?
436 :
デフォルトの名無しさん :2009/12/18(金) 14:10:22
㎥ ブラウザから書き込み
どういうソフトで入力するか次第だけど、 mを↓付け、3を小さいフォントで↑付けの書式にすればそれっぽく見えるかも。
基本的にはMS〜フォントのビットマップ部分の見栄えがよろしくないって話だから。 メイリオ使うとかGDI+等で強制的にアンチエイリアスかけるとか
スレッド内でShowCursor()を読んで、戻り値が負の値になっているのに ウィンドウ上のカーソルが消えてくれないんですが、なぜでしょうか? int func(void *arg) { while(1) {ShowCursor(0); Sleep(1000); ShowCursor(1); Sleep(1000);} return 0; } アプリの最初で_beginthread(funcを起動) みたいな感じでやっても何も起こりませんよ?
カーソルの設定はスレッドごとに別々らしいです そのスレッドに所属するウィンドウにしか効きません AttachThreadInputしてみると何かいいことがあるかもしれません
439じゃないけどへぇ
オレも参考になった。
443 :
デフォルトの名無しさん :2009/12/18(金) 18:01:54
今、別に起動中のプログラム(ウインドウ)の画面をキャプチャする プログラムを作成しようと考えています。 ただ、手順が分りませんの教えて頂きたく思います。 1.キャプチャしたいウインドウのタイトルから、 FindWindow関数で、ウインドウハンドルを取得する。 2.そのハンドルから、GetDCで、DCを取得。 3.そのDCからBitBltで転送する。 という手順で行ったのですが、真っ黒がキャプチャされてしまいます。 また、CreateDC(L"DISPLAY", NULL, NULL, NULL); で作成したDCからBitBltで転送すると、 画面キャプチャは出来たので、 DCをキャプチャしたいウインドウのDCにするだけで出来るかなと思ったのですが、 出来ないのでしょうか。 それとも、手順自体は間違っていないのでしょうか。 お手数ですが、教えて頂ければ助かります。
444 :
439 :2009/12/18(金) 19:32:00
別スレッドだとダメなんですね。
試しにAttachThreadInputを使ってみましたがうまくいきませんでした。
HANDLE cursorThread = _beginthreadex(マウス制御する関数);
DWORD winThread;
GetWindowThreadProcessId(hWnd, &winThread);
if (! AttachThreadInput((DWORD)cursorThread , winThread, TRUE)) {
失敗
}
MSDN (
http://msdn.microsoft.com/ja-jp/library/cc429027.aspx )
によればAttachThreadInputに渡すスレッドIDにはウィンドウプロシージャが関連付けられてないといけないから、
上記みたいに第1引数がウィンドウと無関係な場合は失敗するみたいです。
スレッド使わないで実装するようにしてみます。どうもありがとう
>>443 XP以降のみ対応でいいならPrintWindowでも使っとけばいいんじゃなかったか。
static変数もどうかと思うが・・・ SetProp/GetPropやSetWindowLongPtr/GetWindowLongPtrを使うという手もある
>>447 static な変数ってグローバルみたいなもんだしな。
MDIの子ウィンドウが、 別のアプリケーションによって隠された時は再描画されるのですが、 他のMDI子ウィンドウに隠された時に再描画されません。 子ウィンドウの方から親ウィンドウにWM_PAINTメッセージを送った再も何も反応がありません。 どなたか、問題点もしくは解決策をご教授願います。
WindowsXP付属電卓のボタンがどうやって赤青文字にしてるかわかる人いる? あとフォーカス矩形が描画されないし オーナードローかと思ったらspy++で見てもオーナードロースタイルが無いんだよ
>>446 さん
返事が遅くなりまして申し訳ございません。
PrintWindowで調べましたところ、
WindowsのGDIが単一サーフェスであることを初めて知りました。
画面が黒くキャプチャされたのも納得です。
PrintWindowで再描画した後、キャプチャすれば出来そうな気がしますので、
これから試して見ます。
どうも、有難うございます。
>>451 普通にWM_CTLCOLORBTNじゃないのか?
>>452 いやPrintWindowは自分が作ったビットマップを選択したDCを引数にしてそこに描画させるもんだろう普通。
455 :
451 :2009/12/20(日) 02:21:12
>>453 カスタムドローってリストビューとかコモンコントロールだけじゃないっけ?
>>454 プッシュボタンだけはWM_CTLCOLORBTNが利かないんだよ
これはMSDNでも確認済み
誰か電卓で気になった人いねえ?
マニフェストを置いても無理か?
457 :
デフォルトの名無しさん :2009/12/20(日) 03:49:59
VistaでAeroが有効になっている環境なのですが、 RedrawWindowしても、タイトルバーや枠が再描画されません。 何とか任意のタイミングで、全体を再描画させる方法は無いでしょうか。
>>455 XP以降はボタンにもカスタムドローの通知が来るんだが、
これはMSDNで確認してないのか?
>>457 なんとかリージョンを送るのは基本だったと思うけど
460 :
451 :2009/12/20(日) 04:32:36
>>458 マジで???確認してなかった
調べてみるわどうも
>>457 一時的にDWMを無効にして有効にするしか無いんじゃねぇの?
てかWin7でタイトルバーのフォントを変更してもたまに再ログオンするまで更新が反映されなかったりするし
DWM周りは動作がよく分からんね
超初心者の質問ですが、プログラムのウィンドウ上に表示されているピクセルデータは、どこの変数(構造体)に入ってるのでしょうか? malloc変数に格納するには、どの構造体からデータをもってくればいいですか?
オーナードローじゃなけりゃサブクラス化とかも
>>462 HDC bmp = コピー先ビットマップが設定されたHDC
HDC hdc = GetDC(対象のウィンドウハンドル);
::BitBlt(bmp,0,0,幅,高さ,hdc,0,0,
SRCCOPY | ((拡張スタイル & WS_EX_LAYERED) ? CAPTUREBLT : 0) );//レイヤードウィンドウならCAPTUREBLT追加
ReleaseDC(対象のウィンドウハンドル,hdc);
>>463 すみません、C++はまだノータッチなんです。勉強して出直してきます
>>464 いや、BitBltを使ってコピーするのではなく、そのコピーされる大元のビットマップデータを、たとえば数値で表示する、とかするときは(まあそんなことまずしないけど)どうしたらいいのでしょうか?
とにかくピクセルごとのデータをmalloc変数に入れときたいです。
GetDIBits
XP以前では他のウィンドウを避けながら直接画面に描かれるので触れません 他のウィンドウが覆いかぶさって隠れてる部分はそもそも描かれてすらいません Vista以降はシラネ どこかにあるはずだが、アプリケーションから触れるのだろうか
>>467 そうなのか。
じゃあプログラム内で(ランダム、またはユーザーにより)書かれたものを保存するなら、画像とは別にその書いた動作を全部記録しないといけない、ということですか?
Scribeサンプルとか見てみると、その通りだな。
DWMならピクセルデータが取ってこれたような
>>469 まぢですかあ・・・
がんばろ
あと、
>>466 のGetDIBitsって使い方が良くわからないんだけど、どうもbmpファイルとして保存されたものじゃないとできないようなかんじだった気がします。
昔はGetDesktopWindow→GetDIBitsでスクリーンショット撮ってたのにそんなわけねーだろ
…
なんでbmpファイルの話が出てくるのかさっぱり理解できない。
>>474 じゃあbmpファイルじゃなく、ウィンドウに表示されている画面のピクセルデータを読み込むには、どうしたらいいんですか?
まさかGetPixelしかないわけじゃないでしょう。
構成によってフォーマットが違うよ 直接サーフェースのデータがとりたいならDirectXとか使ってみては
まあフォーマット違ってもいいならGetBitmapBitsで持ってきてもいいけど そもそもhBitmapは取れてるの?
>>465 >いや、BitBltを使ってコピーするのではなく、そのコピーされる大元のビットマップデータを、たとえば数値で表示する
「いや」じゃねえよ、なめてんのか?
コピーしろと言われているんだから素直に従えばいいだろ。
ぐだぐだぐだぐだ何を言ってるんだ?
479 :
デフォルトの名無しさん :2009/12/20(日) 16:37:07
275、308です。
>>309 ご回答ありがとう御座います。
どうやらクリップボードに何か入ってるのは間違い無いですね。
あれから色々調べ、色々やりましたが、(初心者なので)うまくいきません。
クリップボードに入っているものは、BITMAP形式ではない様です。
Keybd_eventだとクリップブックで確認した際に表示されているのに、に下記のソースだと駄目です。
何か良い助言をいただければと思います。
'◇今のソースコード
hdc = GetDC([コピーしたいウィンドウのハンドル])
hClipDC = CreateCompatibleDC(hdc)
Call GetWindowRect([コピーしたいウィンドウのハンドル], Rect1)
hBit = CreateCompatibleBitmap(hdc, Rect1.Right - Rect1.Left, Rect1.Bottom - Rect1.Top)
hOldBit = SelectObject(hClipDC, hBit)
'Call BitBlt(hClipDC, 0, 0 _
' , Rect1.Right - Rect1.Left, Rect1.Bottom - Rect1.Top _
' , hdc, 0, 0, SRCCOPY) '※これも試しました
Call PrintWindow([コピーしたいウィンドウのハンドル], hClipDC, 0)
Call OpenClipboard([pptのハンドル])
Call EmptyClipboard
Call SetClipboardData(CF_BITMAP, hClipDC)
fmt = EnumClipboardFormats(0)
Call CloseClipboard
Call SelectObject(hClipDC, hOldBit)
isfmt = IsClipboardFormatAvailable(fmt)
・上記だと「isfmt]には「1」が返されます。
・「fmt」には、何度やっても一定の7桁の数値が返されます。
⇒keybd_eventでキャプチャした場合は、必ず「2」が返されます。ここがヒントだと思っています。
>>476 DirectXを使えという根拠は?
やったこともないのに適当なことを吹かすのはやめろ。
>>479 プログラムがどうこう以前にDDBとDIBの意味は理解しているのか?
>>480 VRAMの中身を直接取り出したいという可能性を考えただけ
というか、質問者がそれくらい曖昧だと言ってるのさ
曖昧も何もDirectXに自分の管理外のサーフェイスのデータを取り出す機能も、 ウインドウモード時にVRAMのデータを直接取り出す機能も存在しないんだが、 いったい何の可能性だと言うんだ?
484 :
457 :2009/12/20(日) 19:10:02
工工エエエエ(´Д`)エエエエ工工
486 :
デフォルトの名無しさん :2009/12/20(日) 22:57:03
YOU、ソース晒しちゃいなYO!
>>479 ...
DEBUG_API(::SetClipboardData(CF_BITMAP, hBit));
for(UINT uiFormat(0); ; ){
if(!(uiFormat = ::EnumClipboardFormats(uiFormat))){
DWORD dwResult(::GetLastError());
if(dwResult != NOERROR){
DEBUG_OUT(dwResult);
}
break;
}
DEBUG_OUT(uiFormat);
}
DEBUG_API(::CloseClipboard());
...
'ClipBoardTestFor2ch.exe': 'C:\WINDOWS\system32\mfc42.dll' を読み込みました。...
clipboardtestfor2ch.cpp(72) : uiFormat = 2 (0x2) ...
'ClipBoardTestFor2ch.exe': 'C:\WINDOWS\system32\mfc42loc.dll' を読み込みました。...
C++では問題ないみたいだし、ペイントとかのプログラムにも
ペーストできてるけど。悪いが俺にできるのはここまでかもしれん。
それにしても、7桁の数字ってヘッダ見たけどあり得ない気が。
ここ最近、立て続けに画面キャプチャの質問ばっか来てるけど流行ってるのか?
スクリーンキャプチャソフト大会 必須要件 ・Windows XP/Vista/7の何れかで動作すること ・画面全体、指定領域、ウィンドウ領域のキャプチャ ・クリップボードへコピー、BMP形式で保存 開発言語は不問 技術点・構成点・芸術点の総合得点で評価 優勝賞金30万円、その他特別賞など
応募するにはどこに提出すればいいんですか
491 :
デフォルトの名無しさん :2009/12/21(月) 03:52:35
コンピュータの専門学校の大会か何か?
流行ってるってか、同一人物だろ。 つーか >クリップボードから貼り付ける方法の方が早いので、 >今のソースコードを完成させたいと思っています。 とか言ってるくせに一週間以上経っても全く進歩ねーじゃんwww 卒論なのか仕事でキャプってるのか知らんが物凄く能率悪い奴だね
493 :
デフォルトの名無しさん :2009/12/21(月) 04:05:39
SendKeyとかkybd_eventとかでスクリーンプリントキーを押せばクリップボードに
>>275 にパワポと連携できるキャプチャソフトを作ってあげろよ
ここ見てる天才プログラマーの皆様には朝飯前だろ?
495 :
デフォルトの名無しさん :2009/12/21(月) 04:10:29
連携というとDDE通信だな?
フックのほうだろ?
497 :
デフォルトの名無しさん :2009/12/21(月) 04:19:22
画面全体がコピーって・・・ALT+PRTSCじゃないの?
初心者を言い訳にしてる馬鹿にアドバイスしても無駄 スルーしとけばいい
alt を押すとアクティブなウィンドウだけコピーされたような
そんなの常識だから。
502 :
デフォルトの名無しさん :2009/12/21(月) 19:27:59
ぱっぱぱらりら
一週間以上を費やしても全然出来ないのに
それでもキャプチャソフトを自作した方が
>>280 の方法より「早い」のかねぇ
状況がサッパリ理解できないんだが
ウィンドウをクラスにしたいんですがプロシージャとインスタンスを対応させるにはどうすればいいでしょうか?
超頻出 SetPropでも使え
WinMainの第二引数なんですが、ぐぐると現在は使われていないらしいことがわかりました。 では、WNDCLASSに情報をセットする前に if (!第二引数) { のような条件は不要ということでしょうか? WNDCLASS myProg; if (!hPreInst) { ←★これ★ myProg.style = CS_HREDRAW | CS_VREDRAW; myProg.lpfnWndProc = WndProc; myProg.cbClsExtra =0; myProg.cbWndExtra =0; ・ ・
んなこたーない
>>506 常にNULLであるとMSDNに書かれている。
Win16時代の名残でしょ。
Win16でしか通用しない話だし、要らないと俺は思う。 ランタイムがでっち上げているだけの引数だから、 OSが変わっても影響がでることはあり得ないし。
510 :
デフォルトの名無しさん :2009/12/22(火) 20:39:03
>>275 、
>>308 、
>>479 です。
・先ず、この質問で気分を悪くされた方々、申し訳ありません。
十分な勉強をしていない素人が簡単に知識を得ようというのは
良くないことですよね。
マクロの延長線で考えていたので、これ以上は諦めてkeybd_eventで
満足しよう思います。
>>481 存在は知っていましたが、言われて初めて検索しました。
不勉強を実感しています。今後の参考にしていこうと思います。
>>487 何度も丁寧にご回答頂きありがとう御座います。
非常に勉強になり、助かりました。
どうやらクリップボードに入れる以前の問題の様に思います
また時間があればこつこつ勉強しようと思います。
>>488-502 話題にしていただきありがとう御座います。
>>492 、
>>503 毎日の仕事中で、非常に忙しい時間帯に実行する必要があるものなので、
少しでも「処理時間が早い」ものを と考えていました。
あるウィンドウを画面遷移させ、その画面のスナップショットと、
ウィンドウタイトルをpptに貼り付け、また画面を遷移する繰り返しを
100枚以上やるものです。
元々先述の[keybd_event]を使ったマクロで大きく短縮出来ていたのですが、
欲張って[Sleep]が少なくて済む方法が無いかと考えていました。
以上です。長文になり申し訳ありません。
>>505 d
WinAPI始めたばかりでさっぱりだったんだ
質問する前にせめて最新100レス以内ぐらいは探そうよ WinAPIどころか人間を始めたばかりとしか
はいはい、煽らない煽らない
はいはい、煽りレスを煽らない煽らない
質問系スレの最近の回答時効は20レス程度なんで 昔のように500レスぐらい読み返しても重複話題が 全くなかった古き良き時代はとっくに過ぎてる。
キーの同時押しをSendInputで表現することができるようですが、 どのようにコードを組んでいいか分からないので教えてください。
517 :
デフォルトの名無しさん :2009/12/23(水) 01:39:02
MSDN
WM_GETMINMAXINFOについてなんですが、 SetWindowPos等の関数でWS_THICKFRAMEを持たないウィンドウのサイズを変更した際には、 WM_GETMINMAXINFOメッセージが送られきません。 このような場合は、どのようにウィンドウのサイズを制限すればいいのでしょうか。
古き良き時代て 検索もできない馬鹿が増えただけだろ
人間始めたばかりのチンパンジーに検索もできないとか言っちゃうお前が馬鹿だよ
//--Module.cpp-- #include <iostream> struct Hoge { static void __stdcall Func(void) { std::cout << __FUNCTION__ << std::endl; } }; //--Module.def-- LIBRARY "Module" EXPORTS Func = Hoge::Func @1 上記のようにC++のクラス内静的関数、あるいは名前空間内の関数をエクスポートすることは不可能でしょうか?
スレ違い
BitBltではキャプチャできるとは限らないから意味ないよ
>>521 DEFファイルにHoge::Funcではなく、マングル名(C++コンパイラが変形したあとの名前)を記述する。
または、DEFファイルを使わず__declspec(dllexport)と__declspec(dllimport)だけでやる。
ウザイから放置で
GetVolumeInformationで取得できるボリュームのシリアル番号って、 Windows上の画面ではどこで表示できますか?
Windowsの使い方はスレ違いです。
チートの作り方おしえてください
ネタのひねりが全く足りない。 くだらない。
トーチの作り方おしえてください
タネのひねりが全く足りない。 くだらない。
最近レベル落ちた?
チンパンジーが増えただけだろ。
WinMainの最後の引数、MSDNを読むと外部から値を指定して起動すると ウィンドウの挙動を制御できるように読めるのですが、プログラムで対応する処理が無くても MSDNに書かれている通りの動作になるんですか??
536 :
デフォルトの名無しさん :2009/12/25(金) 17:38:28
いま知り合いのMS社員に訊いて見るから3ヶ月くらい待て
だからWinMainの引数は全部不要ってこのスレの前の方にも出てるでしょうが
プロセスAから起動したプロセスBは必ずAの子プロセスになるのでしょうか? Aの子プロセスにせずに起動させる方法はあるでしょうか? ShellExecute や CreateProcess, CreateProcessAsUser で試してみたところ,すべて子プロセスになりました
> すべて子プロセスになりました えっ
>プロセスAから起動したプロセスBは必ずAの子プロセスになるのでしょうか? 多分そうだと思う。
コマンド起動
Win32的には、Toolhelpで手繰って処理でもしない限り 親子関係にあまり意味は無かったりするから、気にしなくていいんじゃない?
漏れも前に色々試してみたけどどうやっても子になったな
ていうか子プロセスになる事の何が不満なのかサッパリ分からん
ちょっと質問です。 ノートPCの筐体を閉じた時に、なんかイベントとかメッセージって飛んで来ますでしょうか? 筐体の開け閉めに連動したランチャーを作ろうかと思いまして……閉めた時にちょっとした処理を行うとか。
ねえよ
WM_QUERYNOTEPCCLOSING 閉じる直前に送られる。FALSEを返すと中止 WM_NOTEPCCLOSED 閉じた後に送られる。
WM_POWERBROADCAST 適当にググったらでてきた 詳しくは知らん
適当なウィンドウをSpy++で監視すれば分かる程度の質問を何故するのか理解に苦しむ
552 :
デフォルトの名無しさん :2009/12/26(土) 19:36:04
Spy++って何?
とある便利なツールの名前
Spy++ も知らずに Win32 開発とは・・・。恐れ入った。
555 :
デフォルトの名無しさん :2009/12/26(土) 19:55:16
マジでSpy++って何? C++の親戚みたいなもの?
556 :
デフォルトの名無しさん :2009/12/26(土) 19:59:23
Spy++ (SPYXX.EXE) は、システム内のプロセス、スレッド、ウィンドウ、および ウィンドウ メッセージを表示できる、32 ビット用のユーティリティです。 Spy++ には次の機能が備わっています。 - グラフィックスによって、プロセス、スレッド、およびウィンドウを含む、システム オブジェクトの関係をツリー表示できます。 - 指定したウィンドウ、スレッド、プロセス、またはメッセージを検索できます。 - 選択したウィンドウ、スレッド、プロセス、またはメッセージのプロパティを表示 できます。 - Spy++ の表示ウィンドウから、ウィンドウ、スレッド、プロセス、またはメッセージ を直接選択できます。 - ファインダ ツールを使用すると、マウスのドラッグ アンド ドロップ操作によって、 特定のウィンドウの情報を検索できます。 - メッセージ記録用のパラメータを指定すると、メッセージ オプションを細かく設定 できます。
557 :
デフォルトの名無しさん :2009/12/26(土) 20:00:30
スパイ++ のほかに 2 つのよく似たツールがあります。 プロセスとスレッドの詳細な情報を表示するプロセス ビューア (PVIEW.EXE) と、 プログラムの動的なデータ交換 (ダイナミック データ エクスチェンジ : DDE) のメッセージを監視する DDE スパイ (DDESPY.EXE) です。
Spy++は、Microsoft Visual Studioに付属のツールです。
チャットじゃないんだから、わからないものはまず自分で調べなよ。 インターネットに接続できる環境もってるんだから。
ちなみにSpy++はEEにはありません。
なんだよ使えねーな
>>549 もっと詳しく。そのWMの値はどこに書かれてますか?
>549 情報サンクス。でもどこにも見付からない……解説ページとかあればぜひ。 >550 WM_POWERBROADCAST はサスペンドとかを設定している時しか飛んでこなさそうな感じでした。 >551 Spy++で試してみたけど引っ掛かりませんでした(@XPSP2)。試したノートPCが古かったのかな……
EEしか知らないWin32プログラマなんて居るのか?
NOTEPC なんて和製英語使うわけないだろ。 からかわれてるんだよ。
ネタに決まってるだろ馬鹿 そもそもFALSEを返すと中止って何だよw 不思議な力が働いてノートPCを閉めれなくするのか?www
ウソを教えろ。
>>567 うそ【嘘】
1 事実でないこと。また、人をだますために言う、事実とは違う言葉。偽(いつわ)り。「―をつく」「この話に―はない」
2 正しくないこと。誤り。「―の字を書く」
3 適切でないこと。望ましくないこと。「ここで引き下がっては―だ」
嘘ではありません。 非公開のウィンドウメッセージなので名前は適当に付けました。 事前にAPIを呼び出してウィンドウを登録しないと通知は来ません。
RegisterWindowMessage() とかを理解した上で言ってれば面白かったのにな。
何言ってんだお前?
>569 値は?
>>570 は非公開メッセージの存在とか事前登録したウィンドウにしか飛んでこない通知メッセージの存在を知らないんだろ
もういいから。
ファイルを右クリックして詳細タブで表示できるプロパティ (ファイルの説明,種類,製品名等の情報)はどうやって取得するのでしょうか?
種類は拡張子からレジストリで。 説明とか製品名とかは、バージョンリソースから。
[―{}@{}@{}-] ↑これ何すか?
串
まじかよ
583 :
デフォルトの名無しさん :2009/12/27(日) 12:09:20
あるNTFS上のファイルを特定する場合 c:\myfile.txt というようにパスで指定すると 移動したりリネームしたりすると破綻しちゃいます。 パス文字列からIDか何かを取得し、そのIDからパス文字列を取得できる API,手法はないですか?
ファイルサイズとハッシュしかないんでは? 一致を探る。 個別の固有番号が付いてるとか聞いたことがない。
NTFSがファイルにIDを付けて管理してるなんてWin32スレ的には常識だろ。
OpenFileByIdつうそのままな名前のAPIもあるしな
へー。ほんとだ。
>>586 で取得した Object ID を渡せるんだね。
>>586 は管理者権限いるしリブートかけるとIDの一意性は保証されなくなるってGoogle先生が言ってた
つーか、GUIDとDWORDで全然違うもんじゃないのか?
DWORDって何?
ファイルIDならGetFileInformationByHandleで得れるだろが
GetFileInformationByHandleのもボリュームシリアルナンバーと組み合わせて一意だから、
ボリューム(ドライブ)を跨いでの移動だと追い切れない。
となると、結局
>>585-586 の追跡サービスのほうがいいという話になると思う。
そんな事まで質問者は訊いてないだろ、ぼけ
あぁ、ゆとり教育の弊害がここにも・・・
たしかに訊いてない 質問者が訊いてるのは「API,手法はないですか」だから、回答は「ある」「ない」だけでいいってことか
「ある」NTFS上の と書いてあるだろ ボリューム間の移動なんてどうでもいいんだよ
ボリュームを跨いだ移動は実質的には削除と同じだから追えなくて当然じゃん
602 :
デフォルトの名無しさん :2009/12/27(日) 20:25:51
ボリュームって何?
つーか質問内容は最後の二行だろう。 余計な部分に食いつくのはスレ住人の悪い癖だな。 パス文字列からIDか何かを取得 GetFileInformationByHandle(Ex) IDからパス文字列を取得 OpenFileById→GetFinalPathNameByHandle→FindFirstFileNameW/FindNextFileNameW
皆仕事で質問の本質とかを考慮しながら答えるのに慣れちゃってるからね。 末端の答えしか必要としないなら、ここよりGoogle先生に聞いた方がいい。
そんなお節介しなくていいから。 そもそもが確実に追跡する方法なんて無いに決まってるのだから 移動したりリネームしたりできないようにロックしとくか 移動したりリネームしたりしても破綻しないように作っとけ という結論になる。
>>583 この場合に相当するかどうかは知らないが、
相対パスや環境変数と組み合わせるのは常識だと思うんだ。
2つのパスを表す文字列が、同じものを指しているかどうかを調べる方法はありますか。 例えば↓のような感じで、同じファイルでも異なる表記があると思います。(なので単純な文字列比較ではだめですよね) C:\foo\hogehoge.txt C:\FOO\HOGEHO~1.TXT C:\foo\bar\..\hogehoge.txt \\?\C:\foo\hogehoge.txt やりたいことは、パスを表す文字列が複数あって、 それらが重複したパスを持たないように、ユニークにしたいってことなんですが。 実際にファイルを開いてみて、ファイル固有のIDを比較するしかないですか?
>608 1つ目のパスの指すディレクトリに、空のファイルか何かを新規作成。 2つ目のパスの指すディレクトリで、作った空のファイルとかがあるかを調べる。 もしあれば、2つのパス(ディレクトリまで)は同じなので、後はファイル名を調べれば良い。
物凄くアホな方法だな
でも面白い発想だぬ
api fullpathなんとかつかえ
相対指定も含めると単語毎にケツから可能性の除去を繰り返すしか無いね
join/subst等考えると>610で更にNTFSなら少し前に出てたIDでチェックかな
ファイルが作成できるとは限らないだろ
UAC有効だとプログラムから作成できなくてもユーザーによる移動・リネームは可能
あ 盲点だ。
GetFullPathName あたりを使うか
GetFileInformationByHandle(Ex) を使う(
>>604 ) あたりが妥当なのか
ファイルIDって確かハードリンクに対して同一のIDだから パスの比較には使えないよ
フツーのパス比較ならPath系APIでいいが MAX_PATHを超えるパスや\\?\には無理 つまり 自分で作れ ってこった
ながいパスを正常に扱える有名どころのソフトやライブラリてあるのかな? 一般的なファイラでも見たことないし。
そもそもWindowsのシェル自体がMAX_PATHを超えるパスを考慮した設計がされてないので ぶっちゃけどうでもいい
そこら辺って7でもまだ直ってないの?
直る直らないってかそういうのと別次元の話なのはITEMIDLISTの定義を見ればわかること
rootkitじゃあるまいしシェルが認識できないパスへ対応する事に何の意味があるんだか
フォルダ名を説明文にしたりしたいのにできないのな みんなはファイルはID振ってデータベースで管理とかやってんのかな
C:\2009年度のファイルです。\12月のファイルです。\2ちゃんねるに関連したファイルです。 \Win32API質問箱に投稿するファイルです。\スレッドはBuild84です。\質問に答えるために試しに書いてみたソースコードです。 \開発言語はC++です。\対応OSはVista以降です。\パス文字列からIDを取得できるのか?\test.cpp こんな感じか? そりゃあMAX_PATHでは全然足りないだろうねw
普通にファイルとパスで一意に特定するだけだが。 IDを使う必要など微塵もない。
検索すればいいんだからファイル名なんて短く簡潔でいい フォルダ階層のみで管理する時代なんてとっくに終焉を迎えてるだろ
「おっぱい膨らみ始めた少女の画像」で検索できるか?
長いパスのファイルってエクスプローラで表示されないの? だとするとセキュリティ的に問題あると思うが・・・
長いパスは糞グラマが作ったソフトでオーバーランするので注意。 例: char fname[MAX_PATH]; lstrcpy(fname,argv[1]); lstrcat(fname,".txt");
これはでも、不可抗力だよな・・・。
どこが?
あそこが
一見3行目にバグが潜んでいるかのように見えるが、 実は2行目でアウト。だろ?
FAT16X(Win95)以降、ファイル名の表記法が緩和され、マルチバイト文字 (一部文字は同一視)が使用出来るようになりました。便利になった反面 別表記でも同一ディレクトリ内部に作成すると干渉する可能性があります。 (不本意に既存ファイルを上書きもしくは削除後新規作成してしまう) ファイルを作成する前にFindFirstFiles FindNextFilesに問い合わせ 情報が得られるかどうかチェックして下さい。情報が得られた場合 はその名称が使用されています。 ファイルオープンで可能か否かでチェックする方法はおすすめしません。 ロックされている場合は不正確な結果になるからという理由もさる ことながらロックしないでオープンした場合の別プロセスの同一操作 に対する順序整合性が保証されないからです。
> FindFirstFiles FindNextFiles そのようなAPIはWindowsには存在しないため、スレ違いです
>>638 argcのチェック?そんなもんでいちいち指摘してたら2chにコードなんかかけないだろ。
行数の制限があるのに。
スマンコ FindExisitingFile FindOtherExistingFile だた
>>641 本気で言ってるならVBでも使ってなさいとアドバイスしておこう。
644 :
デフォルトの名無しさん :2009/12/29(火) 16:10:21
>>639 FindFirstFileとかを使っても、その時点でファイル名が使用されていないか
わかるだけ。
そのファイルを作る前に、別プロセスが同じことをした場合はそのプロセス
が作ったファイルを上書きしてしまう可能性がある。
CreateFileのCREATE_NEWパラメータ指定での実行で早いもの勝ち方式
2つの別表記が同一ファイルかのチェックは、そのファイルを読み書きロック
条件のもとで同時に開けるかでチェックするといいんではないかと...
別プロセスが偶然、一方を読み書きロックで開いていた場合は結果は不正確
だが...
MAX_PATH+1?
>>644 あいにくこれはもうこれ以上大きくならないから没
とりあえずメモリ確保に失敗するケースを想定しないコードは糞。 次のように返値がNULLかどうかをきちんとチェックしてこそ安全なコードと云える。 これを出来ないプログラマーがC/C++を使う資格は無い。 DWORD* DIB32_SafeAlloc(DWORD width,DWORD height,DWORD color) { DWORD* p = (DWORD*)malloc(width*height*4); if(p) { DWORD* q = p+width*height; while(p<q) *p++ = color; } return(p); }
^^;
>>645 > そのファイルを作る前に、別プロセスが同じことをした場合はそのプロセス
> が作ったファイルを上書きしてしまう可能性がある。
とか細かいことは言うくせに、他のプロセスがファイルをロックしてる可能性は考えないの?
それとも先に開くパターンを入れ替えて試すわけ?
652 :
デフォルトの名無しさん :2009/12/29(火) 16:22:04
>>649 IEとかチェックしてなさそうだよなぁwww
>>651 他のプロセスがファイルをロックしていればそもそも上書きしてしまう可能性すら無いから干渉しないだろ
バカかお前
>>653 表記の話をしてるのか開けるかの話をしてるのか、どっち?
表記の話だったなら、俺は全てDOSパス名に変換して文字列一致の判定をすれば、
あとはファイル名だけなんとかすればいいと思うんだけど。
共有資源に対してチェックなんて行為がそもそも無意味なんだよ そんな事も分からんのか
___ クルッ… / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
/ || ̄ ̄|| <⌒ヽ )) <
>>655 はてさて、
| ||__|| < 丿 | どこを縦に読みゃいいんだ?
| ̄ ̄\三⊂/ ̄ ̄ ̄/ \___________
| | ( ./ /
WindowsServer配下のLAN環境ではDFSであることが普通で 「同一ファイル」が複数の名称を持ち得る。 別の名前のファイルの操作が別の名前のファイルに干渉することを 防ぐ手段は無い。 2つ以上のファイルが「同一ファイル」であるか否かを確実に 検出する方法は例えあったとしても非公開だろ。無い可能性も高いし。 それが嫌ならWindowsを使うなって話にもなるかも。 ハードリンクとかもあるし。ハードリンクを考えると Unixとかでも実は同様で、そもそもからしてファイルシステムは メモリと同様、情報の一時記憶領域でしかないんで、情報の半永久 保存を目的とするんだったら、RDBとかの別のミドルウェアを 援用してシステムに応じてそれぞれ工夫しろってのが常識だろ。
そんな常識を何を長々と講釈垂れてるんだ?
天狗になりたいお年頃
> 2つ以上のファイルが「同一ファイル」であるか否かを確実に > 検出する方法は例えあったとしても非公開だろ。無い可能性も高いし。 普通に公開されてるんですが、バカですか?
常識が長すぎるだろJK
MAX_PATH問題に関しては俺はこのスレで過去何度も激論を交わした兵だぜ
結論は?
MAX_PATHを超える可能性がある場合はバッファオーバーランに気をつける。 strcpyの代わりにstrcpy_s、std::stringを使うなど。
可能性がある場合はとか考えずに、全ての場合にstrcpy_sを使え。
確実に信頼できる場合はstrcpyを使った方が何百倍も速いでしょ
>>649 全然Safeでは無いんだが
誰も指摘しないのはさすがレベルの低いプログラマが集うスレってことか
668 :
デフォルトの名無しさん :2009/12/29(火) 17:25:06
.NETならオーバーランとかMAX_PATHとか気にしなくていいのに頭悪い人達だぁよ
>>668 System.IO.PathTooLongException
指定したパス、ファイル名、またはその両方がシステム定義の最大長を超えています。
たとえば、Windows ベースのプラットフォームの場合、パスの長さは 248 文字未満、ファイル名の長さは 260 文字未満である必要があります。
ワラタ
>>669 .NETでこうってことはAPI直す気ないんだよね多分
>>669 CLRが例外を投げてくれるのでプログラマがMAX_PATHを意識する必要は無いってことですよ
.NETでMAX_PATHを無視してバンバン作られると問題になりそうだから仕方なくね?
APIにMAX_PATHの制限があるのだからプログラマはそれに従っとけばいいだけ 仮に2^31文字までのパス長に対応したexNTFSなるファイルシステムが出来たとしても どうせAPI経由ではMAX_PATHの制限が付きまとうのは変わらない
> APIにMAX_PATHの制限があるのだから そんな制限ないから。
WIN32_FIND_DATA::cFileNameがMAX_PATHってことは MAX_PATHを超えるファイルは列挙されないんじゃないの?
.NETではMAX_PATHを超えるパスを扱えない欠陥商品しか作れないんだな
>>673 例外をキャッチするなら手間割いてる訳で、結局気にしてることになるんじゃね
長いパスに対応する必要があるのはマルウェア対策ソフトぐらいだろ。 そういう目的の為に一部のAPIが例外的に長いパスに対応してるだけで一般のアプリが使う物ではない。
APIでも欠陥商品しか作れないのは変わらんがな…。
そういう
>>678 はMAX_PATHを超えるパスを柔軟に扱える優良商品ばかり作ってるんだろうな?
MAX_PATHを叩いてる俺カコイイとか思ってる糞餓鬼だろ。
ファイル名は8.3で全部ルートに
>>660 どうか、その関数を教えて下さいな。
この星の上にあるWindowsマシンたちがかつて作ったファイル(テンポラリを含め)
すべてに一意連番が振られでもしてない限り不可能な筈なんだけど
GetFinalPathNameByHandleだろ
687 :
デフォルトの名無しさん :2009/12/29(火) 19:57:48
知ってるがお前の態度が気に入らない
> この星の上にあるWindowsマシンたちがかつて作ったファイル(テンポラリを含め) > すべてに一意連番が振られでもしてない限り不可能な筈 なんで?
レス検索しろよクズ
例え方から低脳振りが滲み出てるね 僻み入ってくるとなんでこうなるんだ?
この星の上にあるWindowsマシンたち(笑)
オラに1クロックずつ時間を分けてくれ〜みたいなw
693 :
デフォルトの名無しさん :2009/12/29(火) 20:17:27
>>1-1000 どうか、その関数を教えて下さいな。
この星の上にあるWindowsマシンたちがかつて作ったファイル(テンポラリを含め)
すべてに一意連番が振られでもしてない限り不可能な筈なんだけど
694 :
693 :2009/12/29(火) 20:18:18
自己解決しました
>この星の上にあるWindowsマシンたち カッコいいじゃん 凡庸な文しか書けないくせに馬鹿にすんなよ
お前らよく読め。
この星の上にある(全ての)Windowsマシンたちがかつて作った(全ての)ファイル(今は無きファイルも含む)
から同一ファイルを探したいってことだろ。
さあ早く
>>685 に関数を教えるんだ。
;;,,r='';;;;;;;;;;;;;`;;";;; ,,rイ;;;;;;;;;;;;;;;;;;;;;;;;Ξ;;;;; i;;;,=i;;;;;;;;;;;;彡;;;;;;;;;;;;=;; 、、_ ,;;_,, / t;;;;;;;;;;;;;;ノノ;;;;;;;こ;;;; ,,.ィ`;;;;;`~´;;;;;;ニ、、 / ヽ;;;;;;≡;;;;;;;;;;;ヾ;;;; ,i´;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::`ヽ、 レ^ヽ l;;;;;;;;;;;;;;'''';;;;;;;ミ ,/;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ノミミ;;;;;;l、 (_,,;-、 );;/´`i;ミ`i;;;;;; ノ;r''t;;;;;;;:::::;;;;;;;;;ー;;レ'ー';;;;;;;;), )i)ノ ノノ б);;;;;;;;;;;ミ 彳し,,=,,ィ'";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;レ' ,ノ ~ ノ 、 ,/ノ;;;;;ミミ; t;;n;:;;;;ィ:;j'ノノl;;tゝt''_,;=ヽノ、 `ーj `l ~t(;、;;;;; ヽ;、;ノ_i」,__、`i ゝノ,-;‐、,j ,l アンタじゃ無理だ `ー=、 j、 );;; tヽ <'`ー'イ ,,, ゝ‐''" ノイ ヾ~´ ノ i、 ,,ノ/;;; ゝ、.  ̄´ (冫. ノl _,,;=-‐‐-、 ,-‐-'"^ヾ`l / ヽ イノ lヽ、 ,;:'"`> ノ .lー-=、_ / |ノ >ィ`ー、_-ヽ `tゝ=''T") `i、 _,,ィt, `t、` ̄´/l ヽ T" /~>-‐-、rヽヽrヽ | j----、、 _,,..ィ /j :l `'=='" ,ノ ,,(,イ´ ``^'''"´ l l __ 7' -tー'" i' ノ ヽ、 _,,;=''"_,,.;: / ll `ヽ/ | `ー―--==、_ヽ ,,,.ィ'"´ ´ 、 ,, / ,/' l. j /
FindFirstFileInAllWindowsComputersOnThePlanet FindNextFileInAllWindowsComputersOnThePlanet
701 :
685 :2009/12/29(火) 20:31:56
結局誰も答えられないようですね。 これにて 論 破 完 了
____ / \ /\ キリッ . / (ー) (ー)\ / ⌒(__人__)⌒ \ <結局誰も答えられないようですね。 | |r┬-| | これにて 論 破 完 了 \ `ー'´ / ノ \ /´ ヽ | l \ ヽ -一''''''"〜〜``'ー--、 -一'''''''ー-、. ヽ ____(⌒)(⌒)⌒) ) (⌒_(⌒)⌒)⌒))
GetFinalPathNameByHandleで取得したパス名が一致してないから ファイルは別なんだ...??
スパさんみたいだな
>>685 に答えられない低脳の馬鹿共が煽ってるだけか
冬だなぁ…
>>703 限らんよ。ハードリンクの場合は、それぞれの名前が返されるだけ。
同一であるか検証は無理っぽ。ユーザーが名前の大文字小文字とか
を適当に修正して推測するしかない。
>>707 FindFirstFileNameW/FindNextFileNameWで調べればいいだろ
GetFinalPathNameByHandleが最初に出てきたレスを読め馬鹿
馬鹿の大盤振る舞い
この星の上にあるWindowsマシンたちの過半数を占めるXPで使えないので却下 とか言ってきそうだなw
もうだめだこのスレ
DFS上でソフトリンクされているファイルのローカル名称がわかる システムはある意味怖いw(セキュリティゼロ) ってことで、2つのファイル名の遡源を取得して同一かどうか比較する 方法はすべてボツ
最後まで反論しないと気が済まないんだねぇ そういやぁ少し前にもそういう奴いたなぁwww 同一人物かな?
いままで散々ハードリンクの話をしてたくせに 論破されたら突然ソフトリンクに話をすり替え さすがだな MVPの底力を改めて実感したよ
dfsでソフトリンクのローカル名称がわからなかったらどうやって解決すんだよ。
将来のNTFSではCopyの意味も相当変わりそうだし 中途半端な今のシステムでの今回の話は将来大きく 変わりそうな予感。なんで深入りしないほうが吉かと。
後出しジャンケンでもいい、何が何でも勝ちたいんだ! プライドもへったくれもない奴
>>718 権限ってご存知?
権限が無ければ実ファイルシステムの実体が見えないわけで...
こいつは今は亡きWinFS厨だな。
後出しジャンケンできるよう、「かも」「とか」を多用し、幾通りもの解釈が可能となるよう曖昧な長文を書き連ねる。 でも所詮はググって得た知識を継ぎ接ぎしてるだけ。レス間隔が開いてる時間は検索中。 文章から察するに三流大学の学生か専門学校生じゃないかな。
で、ハードリンクの話はどこ行ったんだ?
725 :
デフォルトの名無しさん :2009/12/29(火) 22:08:18
突然論点すり替えてすべてボツですか^^;
結論:ファイル仮想化レイヤーが無かったDOSの頃はヨカタけど戻れない 今の仮想化レイヤーは中途半端でムカツく
>>721 それほどサーバー間をタイトにつないでるdfsってどの実装だよ。
>>726 いや誰もそんな話はしてないから。論点のすり替えばっかだね。
>>727 君に付いている奴だよ。重さ2kgくらいかな。殆どが灰色で白く硬いケースに
入ってるんじゃないかと
>>728 いやファイルシステムの仮想化が中途半端なんで、名前空間レベルでの
慣習的、非法則的同一視が行われる結果、複数の名称が同一ファイルに
マップされる事態が発生して困っている人が居るって話だろ
自分に都合の悪いことは一切見えないんだな
ファイルに対して複数のパスを持てる機能がハードリンクなのに何が仮想化なんだ?
さすがMVP
自己解決しました
>>733 DOS時代の独立した記憶ストリームの名前という位置づけから
マスターとトランザクション(差分)たちに関連付けられた
名前という地位の転換のことを仮想化と呼ぶね
しかしAPIとは合わなそうw
DOSとも合わなかったけどねw
どうせまた10分後ぐらいに新しい用語を引っ提げて戻ってくるだろ
要するにAPIは過渡期の仕様
>>736 なんかもう日本語が崩壊してしまって何が言いたいのか全く分からん
誰か翻訳してくれ
>>738 何?APIが守旧派だって、自民党みたいだなw
何?.NETが改革派だって、民主党みたいだなw
.NETも結局API引き継いでるから改革でもなんでもない
>>738 DOS時代に投入されたAPIが総じてその時代水準に比して
優れ過ぎていたから、その次の次の時代がいち早く来て
しまって結果的に過渡期の仕様と言われるようになった
んじゃないかと...(その殆どは未消化の状態でお蔵入り)
DOSとかどうでもいいから 同じ実体を指すかどうか、複数のパスから参照されているかを意識しなくともアクセスできるのがハードリンクなのに MVPだけあって何も分かってないみたいだな
> 複数の名称が同一ファイルにマップされる事態が発生 この文章でこいつがハードリンクを理解してないのは読み取れた
この星の上にあるWindowsマシンたちにワロタw これはもうネタスレだYO!
>>744 C:¥Windows¥AhoBaka.txt
C:¥Windows¥ahobaka.txt
は文字列としては異なるファイル名だが
ファイルとしては同じだろ
>>746 >ファイルとしては同じ
違う。パスが同じ。
パスとファイルの区別も付かんのか?
> 文字列としては異なるファイル名 ハードリンクどころかファイルシステムをも理解してない事が判明
自己解決しました
パス ファイル ファイル名 これらの違いを全く分かってないやつがハードリンクを語ってたのかよ どうりで話が噛み合わない訳だw
>>750 おいおい
パス名を忘れてるぞ
あと
ストリームとか
シンボリックリンクとか
ショートカットとかも関連してくるな
他にもありそ
パスとパス名は同じ意味でしょうが ファイルとファイル名ほどの違いはない しかもショートカットみたいなアプリレベルの代物を持ち出すなよ つくづく何も分かってないアホだなぁ
c:\autoexec.bat <- パス autoexec.bat <- ファイル名 ↑が示すファイルそのもの <- ファイル でいいの?
MVPですから
パスとパス名が同じ意味に解釈出来る人ってつくづく 幸せなコンピュータライフを贈ってきた人だとオモ 経験値が伺えますなw
>>746 何一つ正解と言える部分が無いんだが、お前本当にプログラマか?
笑い納めだなこりゃあ
だって同じ物だし。
761 :
756 :2009/12/30(水) 00:15:21
代わりに答えてあげます 2つのファイル名を表す文字列のパスが同じとは、それぞれの 先頭から見て同じ文字列が幾つか続いていて同じ部分が¥ で終わっている場合、2つのファイル名は同一パスに あると言いますね。同一ディレクトリにあるとまでは 言えないです。ハイ。同じパスに無くても同一ディレクトリ のファイルかも知れませんよ。 パス名とは、ファイル名が¥を含む文字列の場合を言います。 全然違うでしょ?
他人を騙ってもその間の抜けた文章でバレバレだから。
> 2つのファイル名を表す文字列のパスが同じ そもそもこんな言葉使わねーよ
相変わらず何も分かってねぇwww
765 :
デフォルトの名無しさん :2009/12/30(水) 00:18:45
もう何を行ってるのか分からない
日本語で書いてくれるとうれしいな。
もう喋らなくていいよ お前がMVPだ
ファイルのパスってなぁに?
769 :
デフォルトの名無しさん :2009/12/30(水) 00:23:45
パスはただの場所であってファイル名を含まないの?
しかしまぁ、面白い奴が住み着いたなw
そもそも¥じゃなくてバックスラッシュだろ
773 :
デフォルトの名無しさん :2009/12/30(水) 00:28:09
ウリはウォン記号ニダ
.NETとAPIの間でそういった概念が統一が取れてると思い込まない であげるほうが親切というものです。
だから日本語を書けと(ry
まあ、このMVPがハードリンクを理解するのにあと3年は要するのがわかった
778 :
デフォルトの名無しさん :2009/12/30(水) 00:37:53
MAX_PATH=3+256+1だっけ?
MAX_PATH=255+sizeof(".")+3+sizeof("") だろ
MAX_PATH=260です!
781 :
デフォルトの名無しさん :2009/12/30(水) 00:43:52
あれぇ?MVPどっか行っちゃったね。 どうやらProgrammerじゃないみたいだし、Pigでいいか。
今時自分がプログラマだなんて思っている人は一番 プログラムされちゃってるシトなのにさ
なんだMVPまだいてるじゃんw 大好きな反論と論点すり替えはもうしないの?
本日のMVPショーは終了しました。 次回のお越しをお待ちしております。
プログラマは空論と論点隠蔽が専門ですが...何か?
GetFinalPathNameByHandleは、ファイルが開けないことには使えない、ってのが痛いねぇ。
FSCTL_GET_NTFS_FILE_RECORDを使って$MFTを直接読み取ればいいさ
>>768 パスという言葉が使われだしたのはDOSとかUNIXのシェルとかの
環境変数PATHにちなむのではないかと思てる。
コマンドが与えられたときこの環境変数の値に入っているディレ
クトリ(複数)の下の実行可能ファイルを検索するという意味なのだが
そのへんのセンスで使われているケースが多いんじゃね?
だからパス名とは、ファイル名をルートからの階層表示で
表した時の最後の区切り子より前の部分というニュアンス
じゃないかと
でも、ファイル名をフルパスでといった場合には・・
..¥sample¥test¥hoge.txtのパス名は..¥sample¥test¥ だけど、これはフルパス(表示)じゃない って感じじゃね?
>>779 >sizeof(".")
>sizeof("")
ちょwww
>>791 否定文による定義ってのは凄いなw
あるファイル表示がフルパス表示でないとは
先頭がルートフォルダーになっていないこと
これが本当なのかどうかは知らんが、PC用語の
定義ってのは難しすぎてゆーかその場しのぎ的
というか、いい加減ってか、結構荒んでるな。
少なくとも全員がしゃかりきになって覚えるべき用語
じゃないね。無理に覚えたりすると精神に障害を来すかもな
(にも関わらず会社に入ったら覚えさせられてしまう
ことが多かったりする)
フルパスはWinだとドライブ名も入れないとダメだろう ルートディレクトリから書かれててもどのドライブか書いてなければ 一意に決まらないしな。
バージョンやマウントしているファイルシステム によって違うみたいだな 結局いろいろとややこしいんで大文字と小文字は 区別されないと考えたほうが良さげ というのは未だにあると思う
区別しないでここまで来てしまったのだから、いまさら区別できない。というのがMSの判断。 セキュリティ的に問題有りまくりなのでXpからデフォルト禁止になった。
ゴダゴダやってないで、早く この星の上にあるWindowsマシンたちが納得できる答えを出してくれよ
2つのファイル名が与えられたとき、それらのファイルに変更操作 を加えずに独立したストリームかどうかを判断する決定的方法はある? についての答えなら既に出てるだろ?
この話題で年をまたぐのかw
おめーら、ソ連がアフガンに侵攻したってぇこの年の瀬に なにくだらねぇ話してやがんでい
NtQueryInformationFileでパス名からボリュームに一意なIDを取得できる。 終了。
>>802 ネットワークファイルパスでもおkですか?
権限は影響しますか?
>>804 反論があるなら、エントリポイント示してやったんだから自分で調べろ。
NtQueryInformationFileなんか使わなくてもGetFileInformationByHandle(Ex)で出来るだろ馬鹿
質問はすべて反論だと解釈する奇妙な奴w
808 :
804 :2009/12/30(水) 12:21:14
804!=806ね すねないでね
> これが本当なのかどうかは知らんが、PC用語の > 定義ってのは難しすぎてゆーかその場しのぎ的 > というか、いい加減ってか、結構荒んでるな。 > 少なくとも全員がしゃかりきになって覚えるべき用語 > じゃないね。無理に覚えたりすると精神に障害を来すかもな > (にも関わらず会社に入ったら覚えさせられてしまう > ことが多かったりする) 出た、MVPの名言w パスとファイルの違いわかってないヴァカのくせして偉そうにwww
> この星の上にあるWindowsマシンたちがかつて作ったファイル(テンポラリを含め)
> すべてに一意連番が振られでもしてない限り不可能な筈なんだけど
一晩かかってこれの答えといえるNtQueryInformationFileに辿り着いたわけ?
>>595 で正解出てるのにねぇ〜
ボリュームの種類、権限の相違によらない一般的方法は無いんではないかと 1分間考えたらわかる結論が昨晩のうちに出たのではないかと思ってました がまだAPIレベルで一発解決出来ると思ってらっしゃるのですね
>>810 オレ、さっき参入したんだけど。一晩掛かってとか妄想癖の馬鹿?
> 文字列としては異なるファイル名だがファイルとしては同じだろ > 2つのファイル名を表す文字列のパスが同じ > あるファイル表示がフルパス表示でないとは > 先頭がルートフォルダーになっていないこと よくもまぁこんな知識のかけらもない奴が用語の定義とか言えるねぇ どういう神経してるんだろう
暇ならお外で遊んできたら
>>813 その話題は解決済ですのでお引き取りくださいね^^
MVPまだいてるのかよ てか24時間スレに粘着してるのか
main() { do { Post( 煽りレス ); } while ( 反論してくる人数 > 0 ); Brain( 論破完了 ); } MVPの脳内はこんな感じだから。 反論する人が誰一人居なくなるまでスレから離れないつもりだろ。
スレ内検索すればとっくに出てるのに
>>685 で
>この星の上にあるWindowsマシンたち
とか言っちゃって袋叩きにあって後に引けなくなり、
>>730 でハードリンクを理解してないだけかと思ったら
>>746 でパスを全く理解してないと判明し
>>761 で日本語も満足に書けないと判明
普通ここまで赤っ恥かくと二度と来ないと思うんだけどなあ
権限についてもわかってないんだろうな・・・。
ボリュームについてもわかってない可能性大
ちょっと否定文を書いたらむきになってすべて否定文に してくる人まね何とかには困ったものですなw
>>799 もしかするとボリュームの種類や権限の相違によってうまくいかない場合も
あるかも知れませんが、多くの場合において
>>806 さんや
>>802 さんが指摘されたように、幾つかのAPIを
援用すればわかる可能性が高いようです。
ボリュームの種類(笑)
権限の相違(笑)
APIを援用(笑)
肯定文にしたら一発で笑顔が戻ったようで何よりです
また得意の論点逸らしか
ボリュームや権限についてももよくわかってないみたいだね 無理に覚えたりすると精神に障害を来すとか言ってる向学心ゼロのクソガキなのはわかったけど
鬱になるから正式マニュアルの厳密だが否定的文体など読まず、 解説書や参考書や雑誌の曖昧だが肯定的文体を読むようにしたら?
曖昧な情報を継ぎ接ぎした結果が
>>814 だからなぁw
>>793 > これが本当なのかどうかは知らんが
全くもって出鱈目です
向学心ゼロってプログラマとしては致命的ではなかろうか
向学心ゼロのほうが向いているって。向学心の多い俺はちょっと遠慮させて もらってるけど
>>835 Windowsは常に変化してるからな。理詰で最初に頭から覚え込んでしまう予習大好き
秀才タイプよりか
常に自分が現状に同期が取れてないかも知れないと頻繁に確認することを怠らない
復習勤勉タイプのほうが向いてるだろな
>>793 この人、「定義」という用語もわかってなくね?
>>836 あと言葉の端々に粘着するタイプもあんまし向いてないね。
要所要所は押さえる必要はあるが、あんまし将来を見通して
用語を定められない(余裕が無い)のがWindowsな世界なんで
矛盾が発生してる場合もあるけどそういうのを許容できるタイプ
じゃなきゃ辛いかもね
>>836 ならば復習してるかテストだ。
【問題】
「パス」「パス名」「ファイル」「ファイル名」について日本語で説明せよ。
模範解答をどうぞ>>MVP
常に変化してるつってもパスやファイルといった基本的な用語は変化しない訳だが
パス:定期券 パス名:定期券の名前:会社、路線、区間、期限、利用者氏名などで構成されてます ファイル:オフィスのキャビネットに入ってます ファイル名:(オフィスのキャビネットに入っている)ファイルの名前
なんだ復習もしてないのか さすがMVP
> ファイル:オフィスのキャビネットに入ってます 説明になってねぇwwwwやっぱアホだこいつwww りんご:スーパーに売ってます ってか
ファイル:タイトルシールが2つ以上貼ってある場合があります。タイトルだけで 別のファイルであると即断してはいけません。
ファイルに名前を付けるなんて、、、擬人化もこkまできたか
>>846 APIでファイル名じゃなくタイトル名にアクセスできるの?
それともタイトル名=ファイル名ってこと?
おまいらいいかげんにしろ!
じゃあ、
>>843 はファイルに名前をつけて呼んでるの?キモッ
この流れなら聞ける ディレクトリとフォルダの違いについて教えて下され
>>852 フォルダー:エクスプローラーの左ペイン
ディレクトリー:treeコマンド
さよなら
>>845 >りんご:スーパーに売ってます
さかなは切り身で泳いでるわけではないよ?
>>852 フォルダ:
書類をまとめて整理するための文房具で、ファイルともいう。
ソースはういきぺでぃあ
なぁ〜んだ、答えられなくて逃げちゃったのか どこまでも間抜けな奴
folder directory
859 :
デフォルトの名無しさん :2009/12/30(水) 18:01:25
フォルダはwindows系でディレクトリはUNIX系ってだけじゃないの?
>>859 Win32APIにはCreateDirectory()とかがあるんだが
もともとフォルダはMac系・・・
MVPお得意の論点すり替えが見事に成功したようですね^^
フォルダーはエクスプローラ系だろ ディレクトリとは似ていて微妙に違うと いった程度。エクスプローラ独自の解釈の ディレクトリ世界って感じ
昔のWindowsではマイコンピュータがルートフォルダーでその下にC:ドライブや マイドキュメントがあったりとかしてたし マイドキュメントは一つのディレクトリで大抵C:ドライブの下のあるディレクトリ だったのをエクスプローラが独自のフォルダー空間にマップする時にルートフォルダー 直下に置いたものだった 他にも似たような特殊ディレクトリがあったっけ もしかして今でもそうだろうけど。変わっているかも
> 昔のWindowsではマイコンピュータがルートフォルダーでその下にC:ドライブや > マイドキュメントがあったりとかしてたし ねーよ
フォルダのルートがデスクトップなのはフォルダが登場したWin95以来変わってない訳だが
パスとファイルとファイル名を区別できなかった馬鹿が 今夜はフォルダとディレクトリについて存分に語ってくれそうだw
マイコンピュータが最も特殊なフォルダーで、対応するディレクトリが無いのが 特徴だ(った)ね 以上APIとは関係が薄いので、終了
他のアプリにPostMessageしたあとに、処理されたかどうかを知る方法はありますか? タブの選択を変えたくてPostMessageでWM_NOTIFYのTCN_SELCHANGEとかを送っています このためVirtualAllocExで対象のプロセスのメモリを確保しています 何も考えずに最後にVirtualFreeExをしてしまうと メッセージが処理される前に解放してしまうことがあるようで例外がでることがあります。 解放せずにそのままにしておき毎回そこを使うようにするしかないのでしょうか?
>>869 特殊でもなんでもない
マイネットワーク、ごみ箱、コントロールパネルやデスクトップ“フォルダ”にも対応するディレクトリは無い
こんな事はシェル名前空間を理解していれば常識の範囲内です
>>870 タブが切り替わったか確認するくらいしかないんじゃね?
そもそもWM_NOTIFYってPostMessageできるのか? 構造体のアドレスを渡すシステム定義のメッセージはPostMessageが失敗するようになってたはずだが
WM_CREATE/WM_?ETTEXTなどはERROR_MESSAGE_SYNC_ONLYで失敗するが WM_NOTIFYだけは特例として失敗しない。 だからといってWM_NOTIFYをPostMessageしても良いという理由にはならないので SendMessageで送信しなさい。
>>872 やっぱりないですかね。
切り替わったかどうかを読み取るのも微妙な気がするので、悩んでみます。
どうせ自分用アプリなので深くは気にしていないのですが。
ありがとうございました。
>>873 SendMessageだと全く受け取ってくれませんでしたが、PostMessageだと受け取ってくれます。
ずっとSendMessageでやっててなんで動かないのか悩みまくっていたのですが
ググり直してPostMessageに変えたらあっさり動いてくれました。
ですが今度は別の問題が出てきたというわけです。
SendMessageすべきメッセージで動かないなんて有り得ないでしょうが 君の書いたコードが間違ってるんじゃないの?
タブの選択を変えるぐらいならUI Automationで出来るだろ
878 :
870 :2009/12/31(木) 00:32:31
>>876 動かしたい別アプリに似せたテスト用のプログラムを作り確認したのですが
正確に言うと動かないのではなく、SendMessageだとWM_NOTIFYそのものが来ないのです
テスト用プログラムで、メモリの取得とかを省いた同じ流れのコードで自分自身に送ってみると問題なく動きました
そこで調べたところ過去ログのBuild76の986-996に全く同じ状況の方がいたのでPostMessageにしたのです
>>877 自動テストには興味がなかったので全く知らない手法でした
選択したいタブの取得に若干手こずりましたがうまくいきそうです
C#で組んでいるので逆に助かりました
大きなヒントをありがとうございました
>>870 お前、なんていう名のアプリ作ってんの?
オレの周りに、ヘッポコが作っているから、絶対に使うなと指令だすから是非教えろ。
880 :
870 :2009/12/31(木) 01:26:05
自己解決しました。
UIAって知名度低すぎるよなー まあこの種の掲示板でVirtualAllocExを使ってゴニョゴニョするような 阿呆な回答しかできないヘボプログラマーが多いのが最大の理由だろうけど
つーかWindowsでは異端だがJava辺りでIPCはテキストファイル経由って感じの プロトタイプアプリを作ってから、VB.NETとかC#に移植してもう少しプラット フォームの実情に即したものにして、最終的にVCで書き直すって俺の常套手段 的なやりかたは迂遠?
Javaは知らんが、Win32や.NETでわざわざファイルを経由するなんて馬鹿の極み
>>881 UIAutomationはXP用.NETの一部として提供されたのが始まりだから、
知名度が低くてあたりまえ。
XP/Server2003だと.NET3.0必須だし。
つまり、Vista以降を前提とした開発はまだ少ないって事だな。
887 :
デフォルトの名無しさん :2009/12/31(木) 04:48:52
CGIのurlからInternetConnect(),HttpOpenRequest(),HttpSendRequest()を使って ページを取得するのはどうやるですか? こういう普通のurlだと簡単に取得できるのですが、 hInternet = InternetOpen( "Mozilla/4.0", INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY, NULL, NULL, 0 ); hConn = InternetConnect( hInternet, "サーバー名", INTERNET_DEFAULT_HTTP_PORT, NULL, NULL, INTERNET_SERVICE_HTTP, 0, NULL ); hReq = HttpOpenRequest( hConn, "GET", "index.html", NULL, NULL, NULL, 0, NULL ); HttpSendRequest( hReq, NULL, 0, NULL, 0 ); hReq = HttpOpenRequest( hConn, "GET", "index.html?a=1&b=2&C=3", NULL, NULL, NULL, 0, NULL ); のように、"?a=1&b=2&C=3"が付いているとNOT FOUND ページが取得されてしまいます。
>>885 UIAどころかその前身のMSAAですら知名度は低いだろが
解説サイトを作る連中に初級〜中級レベルの人間が多い為か知らないが 初心者向けのありふれた情報しか載ってないサイトばっかりなのが APIの知名度格差を広げる原因ではないかと推測してみる
2ちゃんねるにコード書いて年越しとはおめでたいな
コードも書けずに年越す糞グラマよりマシ
俺はスクリプトすら満足に動かせずに年越し
パワポとエクセルしか使わなかったorz
ありふれてない情報は売れるからな。
ありふれた情報(しかも間違いだらけ)を売ってるやつもいるけどな
10年以上仕事でWindowsプログラミングやってる。 正月休みだから少しム板を覗いてみたけど 普段はめったにここには来ないな。 この板って有益な情報があまりないもんね。
特にこのスレは罵り合いしか書いてない
プログラマの愚痴の掃き溜めだからな いかに皆仕事で嫌々プログラム書いてるかがわかる
>>887 ブラウザで同じ要求をしてみて応答を確認してみては?
クエリパラメータの渡し方自体はそれで合っている。
> 10年以上仕事でWindowsプログラミングやってる。 何の自慢にもなってないよ。
ブビしか使ったこと無いヘボプログラマに有益な情報なんて無くて当然でしょ
ここ質問スレなんだから、質問と回答以外は雑談スレ作ってそっちでしてくれ。
>>902 スレタイ読め
「Win32API雑談箱 Build84」
もう解決したようだが SendMessage(hWnd, TCM_SETCURFOCUS, index, 0); SendMessage(hWnd, WM_KEYDOWN, VK_RETURN, 0); タブ選択はこれで出来たよ。 アトミックな処理じゃないから、誤動作する可能性はあるが。 普通のタブ形式ならTCM_SETCURSELやTCM_SETCURFOCUSで切り替わるけど ボタン形式だと動作が変わるんだね。
>>904 メッセージを使って強引に操作するのは間違った方法だからわざわざ書かなくていい。
>>889 マスゴミが糞ばっかりになったのは視聴者が糞ばかりだったから
webサイトが糞ばっかりになるのは(ry
webサイトが糞ばっかりになるのはwebが普及したから。
俺2000年以前に毎日6時間くらい、会社の専用回線でインターネットしまくってたけど、 価値のある情報は当時もわずかだったよ。 ただ、当時はエロサイト詐欺サイト左翼洗脳サイト闇情報サイトの比率が非常に高かったね。 まともな情報をWebで書き込んでると、しょっちゅう脅迫電話っていうか、 「著作権を侵害している」とかいう電話が毎度毎度かかってきていた。 既存の曲やキャラクター、写真などは一切使用していないのに。
ホント、無益な板だね w
aa
912 :
887 :2010/01/01(金) 03:44:46
>>899 >クエリパラメータの渡し方自体はそれで合っている。
と教えていただいたので、他を調べてみた結果、この後のHttpQueryInfo()で
余計な事をやって居たのが原因だと判明しました。
お陰さまで解決する事ができました。ありがとうございました!!
今年も雑談よろしくお願いします
Win32APIに関して言えば10年前の方が有益な情報は多かった。 でもこれは当然のこと。 .NETが登場して有能なWin32プログラマが.NETに移行した結果だから。
今年も罵り合いよろしくお願いします
916 :
デフォルトの名無しさん :2010/01/01(金) 16:46:55
確かWin98の時はエディトコントロールに対して SendMessageのWM_SETTEXTで文字列送りつけたら 全体がその文字列に置き換わった覚えがあるんだけど、 今XPで同じことやってみたら、末尾に文字列を追加する動作をした。 これって仕様変更? 記憶違い? どっちかのミス?
.NETはパフォーマンスが出ないのに何で使うんだろう スクリプト言語やらJAVAやらVBやらもいろいろ使ってみたが、結局CかC++に戻ってきた C++はよいところもあるが、無駄が多い上に一貫性を感じない
……ごめん、単純ミスだった。 正月早々何やってるんだ俺_| ̄|○
あ、>918は>916の取り消し。
>>917 こういうヤツってC/C++でも大したコード書けないんだろうな
パフォーマンスを出すのはCPU仕事 CPUを食い尽くすのはプログラマーの仕事
defineみたいな頭の悪い言語仕様に振り回されてる人種に言われたくない罠
> .NETはパフォーマンスが出ない 新年早々おバカ発言ですか
わざわざインタプリタやランタイムかませて、進歩するハードウェアの足を引っ張るのもどうかと思うね
じゃ、コンパイラやらアセンブラやらかますの止めて、全部マシン語でやれよ。ハゲ
バッファオーバーランや整数オーバーフローしまくる糞コードしか書けないプログラマが多いから仕方ない
>>926 やってますが何か?
ハゲてますが何か?
ハゲ増しのお言葉↓
.NETはインタプリタじゃ無いんですけど・・・アホですか?
早くも今年度MVP登場か?
> (define baka? (lambda (x) (= x 923))) > (baka? 923) #t
MVPの座を防衛しようと必死だなw
>>914 有能なプログラマは相変わらずWIN32かMFCで開発してる気がするけどなぁ
VBやらC#やらってAPIはほとんど使わないの? 使うことが多いならめんどくさくない? APIの引数とかの構造体とかから作ってから 呼び出さないといけないんでしょ?
937 :
デフォルトの名無しさん :2010/01/02(土) 00:42:10
while(true) { if( PeekMessage(&msg, NULL, 0,0,PM_REMOVE) ) { if (msg.message == WM_QUIT) break; TranslateMessage(&msg); DispatchMessage(&msg);//MsgProcに送信 } //〜処理〜// Sleep(1); } ウィンドウのタスクバーをつかんで移動させると //〜処理〜//のところに制御が回ってこないのだが正常なの?
>938 プログラマとして優秀な人間は ほかの事に関しても優秀なのかよ。
今年も相変わらず罵り合いだけで安心しました。
ウィンドウのタスクバーってどこだよ?w
943 :
937 :2010/01/02(土) 01:52:11
タイトルバーだった
ドラッグ中にウィンドウの内容を表示する、にチェックしてもメッセージ来ない?
945 :
937 :2010/01/02(土) 02:20:20
>>937 制御が来ないが正常な動作
Windowsの問題点の一つ
>>946 MessageBoxを閉じるまで処理が返ってこないのを問題点というぐらい馬鹿な発言だぞ
いやいや これがあるからウィンドウプロシージャで全部解決というわけにはいかなくなるんだよ その結果処理を別スレッドに分散させざるを得なくなり処理の一元化に失敗してプログラムの構造が複雑化するわけ
>>949 前年度MVPの方ですか?
モーダルループを理解してない馬鹿発言はそのぐらいにしといて下さいね
949訳: スレッドは難しくてわかりません><
952 :
937 :2010/01/02(土) 17:03:07
なるほど、制御が来ないが正常な動作なのか //〜処理〜// を別スレッドにすれば解決なのかな
>>950 どこがどう間違ってるのか分からない
指摘してもらえると助かる
> ウィンドウプロシージャで全部解決 これがそもそも馬鹿
だからどこが間違ってるんだよw
ウィンドウプロシージャで全部解決というのが間違ってます。 これが理解できないならWin32を勉強しなおしましょう。
一度MVPが作ったソフトを見てみたい パスとファイルの区別つかなくてウィンドウプロシージャを分ってない人がどういうソフトを作ってるのか興味がある
基本的に全ての処理はウィンドウプロシージャからぶら下げるんじゃなかった? だから無限ループを作ったりするとメッセージ処理が止まって操作がきかなくなる
何のためにスレッドがあると思ってんだこの馬鹿
だから別スレッドで処理する必要が出てくるから同期とかいろいろ面倒になる それを使わない方法もあるんだけど(というか設計上はそっちが本命だったはず) それでもウィンドウを掴むぐらいでメッセージ処理が止まっちゃったら リアルタイムっぽく動いてほしいプログラムは困るよねってこと
> それを使わない方法もあるんだけど(というか設計上はそっちが本命だったはず) 間違いです スレッドを使うのが本命です
ウィンドウプロシージャではGUIとしての処理だけを行い、それ以外の重い処理は別スレッドで行う Win32の常識だが…
WinSock2の非同期ソケットを調べていてそう感じたんだが…… 例外かな?
一応Microsoft側の視点てことで
ホント何も分かってないんだな
だから別スレッドは使わないでメインスレッドオンリーという前提では 解決できない問題だよねって言いたいわけだが……
> メインスレッドオンリーという前提 だーかーらー こんな前提がおかしいんだよ Win3.1で開発してるのか?
スレッドを使いこなせない馬鹿はレスしなくていいから。
前提がおかしいかどうかを決めるのは君じゃないだろ それが与えられた条件で可能かどうかを判断するのが技術者ってもんだ
シングルスレッド用のCランタイムが廃止されて久しいっていうのに 未だにシングルスレッドに拘るバカって何なの?
でそんな前提でやらなきゃいけない事ってあるんですか
VB6ユーザーでしょ
>>971 だから条件を決めるのは君じゃないってば
>>974 じゃあ誰が条件を決めるのさ?
相変わらず論点を逸らそうと必死だね
私はスレッドが使えませんのでシングルスレッドが絶対条件です ってか?www
かっけーw
MVPに構うなよお前ら
Microsoft側の視点ではGUI以外の処理は別スレッドで行うことになってます
ソースがあるといいな Raymond Chennのブログでもいい 自分のはそう感じただけだから
> メインスレッドオンリーという前提 > ウィンドウプロシージャで全部解決 これが馬鹿だって言ってるのにMVPだけあって何もわかってないみたいだね
罵るためだけに意見も論点を曖昧にして無駄にスレをのばしていくいつものパターン。 罵り合いの果て、結局何の話をしているのか自分でも分からなくなってくんだろう。
論点を曖昧にするのはMVPだけですが何か?
とりあえず罵り合いをしている人間とは別人というのを宣言して、
>>937 の
処理のところで本当に処理をするのはそもそもの誤り。
メッセージループ中では速やかにメッセージを処理するだけで、
定期的に何らかの処理をしたいのであればタイマーメッセージを使う。
メッセージとして処理するには重いのであれば、別スレッドを使う。
ただしGUI以外の処理を別スレッドにするかどうかは内容次第。
ただそれだけの話なのに結論を引き延ばしてグダグダやっても意味がないだろ。
もちろん
>>986 に書いた内容も異論が出てくるだろうけど、
自分の意見をはっきりさせずにあれが間違いだ、分かっていないと、
グダグダやることにいったい何のメリットがあるんだよ?
これが正しいと思うのならはっきり根拠と正確な内容を書けばいいだけだろ。
延々とくだらないやりとりを続けて、いったい何がしたいんだ?
MVPの方がまともそうだけどな。
新年早々自演ですか
どうやら俺様の勝利で終了のようだな
>これがあるからウィンドウプロシージャで全部解決というわけにはいかなくなるんだよ そもそもこれが間違いで、 >その結果処理を別スレッドに分散させざるを得なくなり これが正しいWin32アプリの在り方 >処理の一元化に失敗してプログラムの構造が複雑化するわけ これはキミの技量が足りないだけ というだけの事でしょうが 何をウダウダ言ってるんだ?
とりあえずMVPがスレッドすら使いこなせない素人なのはわかった
>>948 GetMessage(&msg, NULL, 0, 0);
switch (msg.message)
{
case MM_WOM_DONE:
m_waveOutDev.UnprepareHeader(pWaveHdr);
...
m_waveOutDev.WriteHeader();
...
break;
}
メッセージがディスパッチされないため、サウンド再生が停止する不具合が起こる。
>>994 モーダルループを理解していればそのような馬鹿な発言はしません。
理解してるわけないだろ
モーダルループを自分で作ったことがあるプログラマなら理解してるはずなんだが
あと3スレで解決しろよ
>>988 なにか被害妄想が酷くないか?
自分に意見する人間は全部同一人物じゃないの心の平穏が保てないわけじゃあるまい。
>>995 それがグダグダの原因だと言っているんだよ。
「理解していれば」ではなく、自分の見解をはっきりさせない限り、無駄に長引くことになるだけ。
自分の意見に自信があるなら、きっちり説明して一刀両断にすれば終わる話だろ。
スレッドが分かりません モーダルループが分かりません 素人はレスするなよ……
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。