3 :
デフォルトの名無しさん :2008/04/22(火) 15:51:52
4 :
デフォルトの名無しさん :2008/04/22(火) 15:52:15
次スレまだか?
8 :
デフォルトの名無しさん :2008/04/22(火) 15:53:17
1乙
↓3行目に期待
Win32APIって、次のWindowsにも生きてるのかな。 なんかWindows7だっけか? ケロちゃんLOVE!
ま、互換レイヤくらいあるだろう。 でも正直、Win32APIを今さら使いはじめるような人は、終わってると思います。
Win32APIを知らないでいいと思ってるやつも終わってると思うが
あえて言おう。 Win32 APIを直に使うな、と。 いまさら、俺様ライブラリを作るな、と。 先人の通ってきた道をそのまま辿るべきではない。 そんなことをしていたら、先人と同じ場所までしか行けない。
言わんとすることは理解できるんだけど、じゃあ現実の問題としてどうすりゃいいのさ? よろしくご教示ください。
.Net を活用しつつ手の届かない場所でWin32APIを使用。 それでも届かないところはアセンブリ
.NETはないわ。つか結局Win23API使うんじゃ意味ないじゃん。 Win32APIなしで全部.NET上でできるようになれば考えてもいいけど、それは遥か先の話。
19 :
デフォルトの名無しさん :2008/04/22(火) 21:53:00
>>16 すでにある社内ライブラリを使う。
すでにWin32 APIで経験豊富だが疲れてきてる先輩とうまく役割分担する。
既存のソースを丸パクリする。
>>18 それは.NETを使ったことない厨の戯言
・・・そんな俺もWin32API厨
ドトネトはあのキモイソースが嫌
そりゃ、MSIL直接読んでれば嫌にもなるわな。
アセンブラみたいなもんだろ>Win32API 知らなくても殆どは困らないし、たとえば新人に憶えろと強要するようなもんでもない。 ただ昔からやってる人は知らざるを得なかったし、知らないよりは知ってたほうがごくまれに得になる時もある。 そういうもんだ。
いまどきコンパイラの吐き出したアセンブラを見て独自に最適化するやつもいないしな
直は早いんだぜ〜API直叩きはよぉ〜 まぁ普段は.NETやらMFCやらのラッパー使ってても問題ない だけど低水準レベルのところの動作いじりたくなるともうWIN32しかないわ 仕事じゃやらんけどね
こんな所で兄貴のネタを聞くとはおもわなんだ
人様がCPUのパイプラインとか考えて書いたアセンブラのコードよりも、 自分が適当に書いたC++のコードをコンパイラに最適化させたほうが、 速かったなぁ。
Win32 APIが、互換レイヤ経由になれば、かえって遅いなんてことになったりして。
API設計したやつって誰よ あまりに腐ってて反吐がでる
>>30 よし、Win32、POSIX、OS/2に続く、4番目のサブシステムの作成を許可する。
WIN32ごときで低水準とか言われると、自分はさびしくなるな
ANSI/UNICODEだって互換レイヤみたいなもんだがな WOW64も
>>30 歴史があるから仕方ねーよ
もともとDOSのフックであって、1Mbyte以降のメモリーに配置された常駐プログラムだし。
API作り直したら多分Macみたいなことになる希ガス
せめてAPI関数の命名くらいちっとは考えてつけてもらいたかった。
一番長いAPIの名前って何?
ConvertSecurityDescriptorToStringSecurityDescriptor
うへぇ 使い道あるのかこれ?
馬鹿じゃねえのかw本当にw
ハンガリアン記法の目的を理解できなかったのが、Win32 API開発チームですよ?
アイムハングリー
それでもX系のAPIより短いなw
まぁAPI作り直すならたぶん新しいOS作るだろうなw
新しい名前作って、旧 API はそのラッパにすればいいんだよ。
いまは文字数や長さなんて問題ないだろ。 長かろうと明確に機能を表現しているべき。 昔のコンパイラには識別子の長さに制限があって、N文字以上は無視しちゃうので、 N文字以内が重複しないようにするために、不格好な名前の付け方をせざるをえないことがあったが。
>>44 それがLonghornだったのだが・・・。
もう名前じゃなくて番号でいいです
UUIDでOK
それ何て COM
またドトネト厨が布教活動するためにWin32スレを荒らしてるのか
んなの適材適所でいいだろ
Win32 APIには、どこからどこまでが含まれるの?
Win30からWin39まで
>>54 正直DirectXやネイティブAPIはスレチだと思うがどうよ
>>55 つまんね
ネイティブAPI?
ntCreateFileとか
質問なかったら、雑談スレになっちゃうのがたまにキズだよなぁ・・・
DirectX → 専用スレ行け ネイティブAPI → Win32の土台だしぃ インデックス・サービス関連は? ターミナル・サービス関連は? クラスタリング関連は? WMIは? MTSは? MDACは? SAXとかXSLTは? Windows Media ほげほげ は? Video for Windowsは? CDO、Exchange、MAPI、NetMeetingは? Active Directoryは? MSMQは? TAPIは? MMCは? Windows Installerは? WMIは? IISは?
専用スレがあるかないかの単純な話だろ
ほかに適切なスレがあればそこで聞くべき。 なければここで聞いてもいいと俺は思うが、 回答が返ってこない可能性が高いはず。
>>60 分類してる暇あったら質問に答える努力しろよ
四連投か。醜いな。
叩かれると同一人物に見えるのか。醜いな。
まあぶっちゃけグレーゾーンのネタはこのスレの奴がカバーできる範囲まででしょ
それは君の理解力が足りないんだよ。
どこからグレーゾーンな話題が出てきたんだ? 話が飛躍しすぎだろうが
Win32APIはグレーゾーンです(笑)
なんか頭の悪い奴が沸いてるな
伸びてると思ったらまたこんなかよ VIPやニコ動じゃあるまいし糞レス自重しろ
DLLで線引きしたらいいんだ ---------------Win32APIホワイトゾーン kernel32.dll user32.dll gdi32.dll advapi32.dll winmm.dll ---------------Win32APIグレーゾーン msvcrt.dll ntdll.dll shell32.dll shfolder.dll comctl32.dll comdlg32.dll ---------------管轄外
ぶっちゃけWin32API自体がグレーゾーンだろう 簡単に他プロセスを落としたりコード注入できるし、実際マルウェアがそれらの技術を悪用している こんなインセキュアなAPIが滅びるのは時間の問題だから今のうちに.NETに移行しておけば後々苦労しないよ
おまえ日本語読めるのか?: いまはこのスレで語るべきWin32 APIについて議論しているんだぞ。 Win32 APIの危険な挙動じゃねぇぞ。 しかも論点が沸け分からんし。 .netだってファイルを削除したり置き換えたりできるじゃないか。 セキュリティ上問題あるだろ。 そもそもCPU時間という貴重なリソースを消費するものは邪悪だろ?
↑話を理解してない馬鹿
ごめん80は78に対してだった 死ね78
寝言は寝て言え
睡眠書き込みかもしれないだろ! 寝て言うより高度な技術
>>79 とりあえず落ち着けw
"読めるのか?:"とか"沸け分からん"とかお前のレスの方がわけ分からんぞw
> いまはこのスレで語るべきWin32 APIについて議論しているんだぞ。
ここはWin32APIについて議論するスレじゃなくてWin32APIについて質問or回答するスレじゃないのか?
↑話を理解してない馬鹿
↑話を理解してない馬鹿
↑話を理解してない馬鹿
流行語大賞 Build64:「知らないならレスしないでください」 Build65:「↑話を理解してない馬鹿」
よもまつ
なんかグレーゾーンという単語を読み間違えてないか? 犯罪臭い物をグレーゾーンと言ってるわけじゃなく、単に 「Win32APIかどうかの定義が曖昧」なのをグレーゾーンと表記してたように読めたが
92 :
デフォルトの名無しさん :2008/04/23(水) 12:39:55
↑知らないなら話を理解してないレスしないでください馬鹿
どう読んだらそうなるの
「↑」と「馬鹿」を使ってるのは無視したほうがいい。 このレスとか
他のスレだと問題の切り分けすらできない可能性が高い。 このスレだとだいたいの切り分けができる。 例えば回答が、レジストリのココをいじれ、とか、Wake on LANでググれとかだと、 このスレに流れつくのも仕方ないと思う。
俺は自分が答えられることならAPIの話と少しずれててもここで答えてやろうと思ってるがね
WindowsSDKの範疇は全部、ってことでいいか?
つまり.NET関連もここでいいという事か
マネージ系は除こうよ。 専用のスレのほうが分かる人が多いだろうから 聞くほうも答えるほうも幸せ。
結局
>>61-62 じゃない
わざわざ40レスも余分に消費してまで議論してるなんて
ホント、要領が悪いというか頭が悪いというか
↑話を理解してない馬鹿
Win32AHO質問箱でつか?
USO800準拠
ANSI(Ahobakari No Sa Itama)企画
この辺でAPIフックがらみの質問がくると大胆予想
定番だね
.Netは重いしメモリ食うから嫌い クルーソーの800MHzのCPU積んだノートで.Netで書かれたソフト起動したら1分待たされたしw
初回起動は最近のPCでも結構待たされるわな<.net まあそれ故のSuperFetchなのだろう
111 :
デフォルトの名無しさん :2008/04/23(水) 21:19:13
↑話を理解してない馬鹿
_、_ ヽ( ,_ノ`)ノ 残念、それは私のおいなりさんだ へノ / ┌→ ω へ │ │ │
IEのオプションでスムーズスクロールをオフに出来るけど、 あれってプログラム単位でスムーズスクロールのオンオフを 切り替えできるってことなんでしょうか。 リモートデスクトップなんか使っていると、エクスプローラの ツリービューのスクロールはローカルで使ってるのと同じくらい 早いんだけど、自作アプリのツリービューのスクロールがライン毎で えらい遅いのでなんとかしたいのですが。。。。。 動作環境はXP SP2です。
↑話を理解してない馬鹿
>>108 Crusoeは詐欺CPU
ベンチマークのスコアは立派だが、実使用ではまるで性能が出ない。
>>115 それは十分承知だが、ネイティブAPIのアプリだったらすぐ起動するからね。
コードのワーキングセットが、コードモーフィング結果のキャッシュをはみ出すと、途端に劇遅になるからな。
NTnativeとは違うのは、文脈から明らかだろう。
121 :
デフォルトの名無しさん :2008/04/24(木) 02:36:06
質問があります。IMAGELIST型を読み込みたいと思っています。 ビルドは通るのですが、途中でエラーが出てしまい、原因が分かりません。 同じようなエラーで困った方、解決方法をご教示ください。よろしくお願いします ImageList_LoadImage関数をコメント文にすると実行可能になるので、この部分でエラーが出ているようです。 HIMAGELIST h_img; h_img = ImageList_LoadImage(hInst, (LPCTSTR)IDB_ICON, 15, 0, CLR_DEFAULT, IMAGE_BITMAP, LR_LOADMAP3DCOLORS); エラー内容 'System.TypeLoadException' のハンドルされていない例外が hoge.exe で発生しました。 追加情報 : アセンブリ 'hoge, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' から型 '_IMAGELIST' を読み込めません。 開発環境 VC SDK
Win32ネイティブをネイティブAPIなんて言う奴初めて見た
123 :
113 :2008/04/24(木) 06:26:34
>>116 オーナードローしてます。そのせいだとすると、対策なしですね。。。。
状況を自分で判断して再描画スキップするぐらいしかないかな
>>121 hInstに入ってるのは何か?
IDB_ICONはなんとdefineされているか?
そもそもなぜ.NETでWin32のイメージリストを使う必要があるのかね?
MFCじゃないかぎり、アイコン表示でSDKなら普通使わない?
.netならSystem.Windows.Forms.ImageList辺り使えば
より高機能な物がクラスライブラリに付属してるのにわざわざWin32のImageListを使うなんて・・・ まあWin32版の方がリソース消費量は少なかった気はするが
130 :
デフォルトの名無しさん :2008/04/24(木) 10:33:19
↑話を理解してない馬鹿
クラスライブラリとか・・・SDKって書いてあるだろ。 質問の内容を理解せずにMFCなら!MFCなら!とかまんせーすんなよ。
うるせーデブ
.netなのにSDKかよ アホだな
134 :
デフォルトの名無しさん :2008/04/24(木) 12:16:27
で? Linuxならそんなもん使わなくてもすぐできるのに。
135 :
デフォルトの名無しさん :2008/04/24(木) 12:34:24
↑話を理解してない馬鹿
136 :
デフォルトの名無しさん :2008/04/24(木) 12:55:23
135には同意できるw
DrawFocusRectって単に反転色の点線を描くだけのAPIかと思ってたら、下の色によっては 反転じゃなく濃灰色の点線になったり、下地が青色系とかだと点線じゃなく実線になったりと 結構いろいろやってるAPIだったのね。
r;ァ'N;:::::::::::::,ィ/ >::::::::::ヽ . 〃 ヽル1'´ ∠:::::::::::::::::i i′ ___, - ,. = -一  ̄l:::::::::::::::l . ! , -==、´r' l::::::/,ニ.ヽ l _,, -‐''二ゝ l::::l f゙ヽ |、 ここはお前の日記帳じゃねえんだ レー-- 、ヽヾニ-ァ,ニ;=、_ !:::l ) } ト ヾ¨'7"ry、` ー゙='ニ,,,` }::ヽ(ノ チラシの裏にでも書いてろ :ーゝヽ、 !´ " ̄ 'l,;;;;,,,.、 ,i:::::::ミ ::::::::::::::::ヽ.-‐ ト、 r'_{ __)`ニゝ、 ,,iリ::::::::ミ ::::::::::::::::::::Vi/l:::V'´;ッ`ニ´ー-ッ-,、:::::`"::::::::::::::;゙ , な! :::::::::::::::::::::::::N. ゙、::::ヾ,.`二ニ´∠,,.i::::::::::::::::::::/// :::::::::::::::::::::::::::::l ヽ;:::::::::::::::::::::::::::::::::::::::::::/ / ::::::::::::::::::::::::::::::! :|.\;::::::::::::::::::::::::::::::/ /
ANSIしか対応してない関数でUNICODE文字を含むファイルを開くにはどうしたらいいでしょうか MoveFileやCopyFileは利用しない方針でおながいします とりあえず思いついたのが8.3形式のショートファイル名を利用する方法だったんですが オプションで生成しないように切り替えられるんですよねえ、これ
> ANSIしか対応してない関数 具体的に
普通に開けばいいじゃないか 何がひっかかって開けないの?
ImageHelpAPIとか 具体的に言えばMapAndLoadかImageLoadが使いたい
Unicode文字を含むファイル名を、ANSIのAPIや、 あるいはUnicodeに対応してない古臭いライブラリとかで使いたいんだろうか。 Vistaのシンボリックリンクで別名を作るとかは? MoveFileやCopyFileではないぞ。
NTFSならCreateHardLinkしちゃえ
>>143-144 なるほど、それは良さそうですね
リンク作成の方向で検討します( ´∀`)
>>142 EXEやDLLのファイル名にANSI以外の文字を使うこと自体が邪道。
かつては8.3を越える長いファイル名もご法度だったんだ。
>>146 いやまあそれ以外にも統合アーカイバライブラリのDLLもANSIしか無かったり、色々あるのですお
とりあえず、ありがとうございます
>>146 今のWindows自体にそんな制限など存在しない。
たんにヘタレなPGの言い訳にすぎん。
8.3の制限を持ち出すとなると、当然32bitコードも邪道だと思っているんだよな?
ポインタのサイズが今までの倍もあるんだぜ。もったいないじゃないか!
>>148 > 今のWindows自体にそんな制限など存在しない。
8.3形式の短いファイル名でレジストリや設定ファイルの類いにパスが記録される
↓
何らかの原因で8.3形式の短いファイル名が一致しなくなる
↓
どぼん
そういうのを避けるために8.3形式にしているのをヘタレと言うのなら、どうぞお好きに。
> 8.3の制限を持ち出すとなると、当然32bitコードも邪道だと思っているんだよな?
なわけない。
てかSJIS外の文字をファイル名に使うことってほとんど無いと思うけど
☀.txtとかそんな名前でも付けてるの?
>>148 PEヘッダに記録されるファイル名はANSIなんだが
それに俺の環境だけなのかは知らんがASCII文字以外を使ってるEXEがタスクマネージャで化ける
俺はBig5ならしょっちゅう扱ってる
CreateProcess(NULL, "sample.exe", NULL, NULL, FALSE, CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi); hWnd = FindWindow("sample", NULL); SendMessage(hWnd, WM_CLOSE, 0, 0); この順番に処理させたいんだけどうまくいかない hWndが0になってしまう どうすればCreateProcess→SendMessageが上手くいくようになる? *sample.exeはコンソールアプリ
>>153 本当にコンソールのタイトルに"sample"なんて表示されてるか?
"c:\windows\cmd.exe"とか出てるはずだが
言い方がマズイかな コンソールのタイトルは "カレントディレクトリパス+sample.exe" になるはず
156 :
153 :2008/04/24(木) 20:07:21
>>154 ,
>>155 FindWindowの第1引数をsample.exeのフルpathにしてもだめ(hWnd=0)でした
パスって言うかコンソールのタイトルとFindWindowの引数が正確に一致してるのかって話なんだが 大文字小文字の差も含めて 少なくともSpyはタイトル拾えてるから引っかからないって事は無い筈
>>156 まずはSpy++とかで確認しる。
ちなみに、CreateProcessしてすぐにFindWindowしてる、なんていうオチじゃないだろうな?
160 :
153 :2008/04/24(木) 20:24:56
CreateProcessの次にFindWindowしてます・・・
161 :
153 :2008/04/24(木) 20:28:12
検索してたら見つけたんだけど、この使い方解説お願いできます?
URL:
http://homepage2.nifty.com/DSS/VCPP/API/ProcessEnd.htm BOOL CALLBACK EnumProc(HWND hwnd, LPARAM lParam)
{
DWORD dwThreadId, dwProcessId;
dwThreadId = GetWindowThreadProcessId(hwnd, &dwProcessId);
if (dwProcessId == (DWORD)lParam) {
PostMessage(hwnd, WM_CLOSE, 0, 0);
}
return TRUE;
}
// pi は CreateProcess() したときの PROCESS_INFORMATION
EnumWindows(EnumProc, (LPARAM)pi.dwProcessId);
****ここまで引用
CreateProcessの直後にFindWindowしたら駄目にきまってるだろう。 プロセスが起動した瞬間にウインドウができるわけじゃない。
>>161 CreateProcessで作成したプロセスが所有するウィンドウにWM_CLOSEをポストしてる
当然CreateWindowで作ったウィンドウを持ってないプログラムにゃ無効
つかコンソールにWM_CLOSE送るなら terminateprocessでも使っとけば良いんじゃねえのか
165 :
153 :2008/04/24(木) 20:50:22
ありがとうございます
>>164 上のURL先に
>緊急遮断に使用するものであり,終了するが正常な終了方法ではない
とありますが大丈夫ですか?
正常終了するにはどうすればいいですか?
コンソールにWM_CLOSE送ったってムリヤリ終了してるから気にするな コンソールプログラムならプログラムが自発的に終了しない限り正常終了しない
>>165 外部から無理に止めるのが正常な方法であるわけがない。
メッセージを投げてターゲットプロセスが自分で終了するようにするのがまっとうな方法。
WM_CLOSEをポストする。 キャンセルできるから確実性はないけどな。
そういう場合はパイプで繋げてシグナルを送信するんだよ
170 :
153 :2008/04/24(木) 20:59:45
ありがとうございます 望みどおりの動作してくれました
171 :
153 :2008/04/24(木) 21:04:09
>>167 自力終了 == 正常終了
なんですね覚えておきます
>>169 パイプ・シグナルの事も頭に入れておきます
Googleの弊害だよな。 適当に検索して、それっぽいコードを継ぎ接ぎする、本質を理解しようとしない人間が量産されるのは。
173 :
167 :2008/04/24(木) 21:25:00
>>171 外部から何かを受け取ることでエラー終了するように作られたものもありうる。
少なくともあるプロセスがどういう状況にあるのかを無視して終わらせるのが正常とは言えない、
ということだ。拡大解釈やめれ。
そもそも、CreateProcessして即座に終了させるって、無意味だろ。 なぜ外部から終了させる必要があるのか、まずは、そこから話してみ。
試してるだけじゃないのか
176 :
153 :2008/04/24(木) 21:58:44
>>173 わかりました
>>174 CreateProcessしたプログラムで処理してる時に
別のプログラムの処理も必要になった時のために
メインのプログラムから起動するようにしました
どうせやるなら終了もメインのプログラムからした方が
使いやすい(手間がかからない)と思ったからです
>>153 FindWindowの第一引数はクラス名だぼけ
HWND FindWindow( LPCTSTR lpClassName, // クラス名 LPCTSTR lpWindowName // ウィンドウ名 ); ここまで誰も気付かなかったな すげぇw
LPCTSTR型のクラス?
ごめん なんでもない
ウィンドウクラスというのはだな・・・(ry
>>176 > どうせやるなら終了もメインのプログラムからした方が
> 使いやすい(手間がかからない)と思ったからです
なるほど。
その子プロセスは、どういったものなの?
また、
その子プロセスの正規の終了条件もしくは終了手順は、
どういったものなの?
なんという盲点
184 :
153 :2008/04/24(木) 22:22:46
>>182 1、ある時刻になったらBEEP鳴らして終了
2、文字列をある規則で別の文字列へ変換して待機(別ファイルを読み込む可能性があるため)
3、文字列から特定の文字を削除(同上)
etc
2と3はexit入力で終了です
>>184 えーと、対話的に入力を受付けてるわけね。
で、exitとタイプしてリターンキーを押すと終了、と。
ならば、
WaitForInputIdle()
で入力待ち状態になるまで待ち、
コンソールに"exit\n"を送るのが、
正規の終了手段だと思う。
186 :
153 :2008/04/24(木) 23:18:25
>>185 sampleがSleep中でもWaitForInputIdle()の次の行へ進んでしまいました
>プロセスがコンソールアプリケーションである場合〜中略〜WaitForInputIdle 関数は即座に制御を返します。
とmsdnに書いてありました
あーごめん、じゃぁ、ちょっと面倒だな。 そのsampleも自分で作っていて変更可能なら、 入力待ちするところで、イベントオブジェクトの状態をチェックして、シグナル状態なら終了するようにして、 親プロセスが子プロセスに終了してほしいときに、イベントをシグナル状態にしたらどうよ。
WaitForInputIdleって対象プロセスが最初にGetMessageを呼ぶまで待機するとかそんな感じだったような
>>186 STARTUPINFO::hStdInput/hStdOutputあたりにMailslotのハンドルを渡せばできた気がする
質問です う
なんすかwwwwwwwwww
FileMonで"FASTIO_QUERY_OPEN"ってなるやつって、具体的にはどうやってファイルオープンしてるんでしょうか NtCreateProcess()とNtOpenProcess()とNtCreateSection()の3つに フックをかけて監視してるんだけどどれにも引っかからない
192 :
デフォルトの名無しさん :2008/04/25(金) 12:06:41
またネイティブAPIか
xmlとかYAMLとかをhttpで送受信するのに便利な通信モジュールないかな。 WININETとMFCは試したけど、通信の待ち時間とかを有効に使おうとするととても書きづらい。
本当に必要なのは通信の待ち時間とかを有効に使うための知識か
通信の待ち時間を使って本を読んでます!
ワロタ COMでもいいのかな
>>172 検索して見つかったコードを自分なりに書き換えるのもまたイイ
boost::asio
マルチスレッド化して、その内のあるスレッドで同期系のものによって通信するのも1つの手ではある。
200 :
デフォルトの名無しさん :2008/04/25(金) 21:05:53
TCP通信ってさ、勝手に同期とって転送してくれるんじゃないの? 俺、TCPで同期とか考えたことないんだけど。。考えが間違ってたらご指摘plz
じっと待ってられないせっかちさんと、途中でキャンセルしたくなる優柔不断さんのため
WinInetには非同期モードあるぞ、一応。
DLLでエクスポートされたデータ変数について、 ちょっとお聞きしたいことがあります。 例えば、変数をエクスポートする際 __declspec(dllexport) int *dll_val; と宣言すれば、メイン側からこの変数は __declspec(dllimport) int **_imp__dll_val = &dll_val; と同じように扱われると、最近msdnで知りました。 なので、メイン側からのこの変数への参照が、アセンブラレベルでは DWORD PTR [_imp__dll_val] のようになると予想していました。 VC2005のデバッグモードでは、確かにそうなっていました。 しかし、リリースモードでは、なぜかそうなっていませんでした。 これに対応する個所が offset _imp__dll_val のように書き換えられていたのです。 これを行うためには、_imp__dll_valのアドレスが事前に決まってなければならないと思うのですが、 ベースアドレスが固定のwindows dllで、このようなことは可能なのでしょうか?
リロケート情報あるんじゃないのかな
ベースアドレス固定ってntdllとkernel32ぐらいじゃね?(Vistaは知らん)
>>191 おそらくは各ドライバ(ntfs.sysとかかな)のFastI/Oディスパッチルーチンの呼び出し
_FAST_IO_DISPATCH構造体でぐぐれば情報はでる あくまで推測だけど
>>204 dllでリロケートする場合って、必要な全アドレスを書き換えますよね。
この場合、間接ポインタではなく'offset _imp__dll_val'で変数を使うことは可能なのでしょうか?
>>205 すいません。ベースアドレス固定ではなく、
「dllごとにベースアドレス固定」が正しい表現でした。
ねぇ、もうWinFXみたいなのって作らないの?
WinFXって.NET3.0だろ
既に完成したものをまた作ってどうすんだろうね
>>200 それ同期違う。
ここでの同期は、転送が完了してから制御を返すこと。
逆に、転送が完了するのを確認せずに制御を返す関数が非同期。
入力されたパスのフォルダに入っているファイルを リストコントロールに表示させているのですが、 この時のパスを格納するための配列は256バイトあれば大丈夫ですか?
せめてMAX_PATH。
成る程260バイトですか、ありがとうございます。
>>214 そのレスだと平気で
p = (LPTSTR)malloc(260);
とか書きそうな雰囲気だな
まあ俺には関係ないからどうでもいいが
>>215 そのように書く事によって何か問題が起こるとは予想がつかないのですが、
相応しくない書き方、という事ですね、
すみませんが、理由を知りたいです。
261あったらどうするの?
必要なだけ確保する それが動的メモリ 逆に無駄な分は確保しない
ちょっとまて、お前ら答えを教えてやれよw まあ、自分で探すのも大切ではあるが。
知らないならレスしないでください
>>216 ヒント
#ifdef _UNICODE
typedef wchat_t * LPTSTR;
#else
typedef char * LPTSTR;
#endif
MAX_PATH * sizeof(TCHAR)
知ってるならレスしないでください
225 :
デフォルトの名無しさん :2008/04/26(土) 11:15:52
↑話を理解してない馬鹿
↑自演馬鹿
227 :
デフォルトの名無しさん :2008/04/26(土) 11:20:41
↑正解
_、_ ヽ( ,_ノ`)ノ チッ、乗り遅れたか・・・ へノ / ┌→ ω へ │ │ │
まだ誰も言っていないが、260じゃなくてMAX_PATHって定数使えよ。
MAX_PATHはかなり前に出てる 質問者が勝手に260に変換しただけ
この中に、「MAX_PATH を超えるパス名など存在しない」と思ってる人が!
そんなのexplorerだっていい加減だから気にしなくていい
↑話を理解してない馬鹿
double型の数値を表示するのに、 double dbl=1.23; char res[32]; wsprintf(res,"%f",dbl) SetWindowText(hWnd, res); とするとfと表示されるだけです。 どこがおかしいでしょうか?
wsprintfは実数使えないよ
せめてMSDNでAPIの説明を読んでから質問しろよ
StringCchPrintf
>>237-240 超亀ですが、ありがとうございました。
もっとちゃんと勉強しなおします。。
wsprintf の 'w' って "Windows" のことだよね? lstrcpy の 'l' はさっぱり分からん
同じように95時代のソースみてると _lopen とかつかってて _l ってなによって思う
LPSTRと同じようにlong pointerじゃないの?
指定の他のソフトにきているメッセージを調べる方法ってありませんか?
グローバルフック
lsprintfでも良かったのにwsprintfなのが謎 kernel32.dllじゃなくてuser32.dllにあるのも謎 しかもWin9x系だと実体はkernel32.dll内にあってuser32!w(v)sprintfは実体にjmpしてるだけだし
swprintf と wsprintf があるからややこしいんだよな。 しかもそれでいて wsprintf は %f がないという大きな仕様の差があるし。
CRT: sprintf, swprintf
Win32: wsprintf
CRT: vsprintf, vswprintf
Win32: wvsprintf
CRT: _snprintf, _snwprintf
Win32: wnsprintf
CRT: _vsnprintf, _vsnwprintf
Win32: wvnsprintf
>>249 それだけじゃないぞ。
wsnprintf じゃなくて wnsprintf とか、もうアホかと。
>>250 こういうの、1〜2回/年くらいしか趣味でWinアプリをつくらない
ハード屋のおいらにはつらい
シーケンシャルで読み捨てるんだったら メモリマップトファイル使っても効率落ちるだけですかね?
読み捨てるのに明示的にマップする必要なんてあんのか
ReadDirectoryChangesW() を同期モードでワーカースレッドで使用した場合に, メインスレッドから制御を変えさせる(中断させる)方法ってありますか?
255 :
デフォルトの名無しさん :2008/04/27(日) 11:04:31
multimedia timerとhigh-resolution timerの使い分けはどのようにすればいいのでしょうか?
気分しだい
同期用のディレクトリハンドルを閉じてみるとか
>>252 数MBくらいのファイルだが、
シーケンシャルな読み取りしかしないときにメモリマップしたら、
バッファリングありで普通に読み取るよりは速かった覚えがある。
バッファリングぐらい自前でしろよ
>>257 今やってみたけど制御帰らなかった…(´・ω・`)
1.clやgccでコンパイル・リンクして出来上がった*.exeファイルは、 CPU(ペンティアム等)が直接理解できる形式のファイルなのでしょうか? 2.上記の答えが「直接理解できないファイル」の場合。 CPUが直接理解できるファイルを、clやgccで作成することは出来ますか? 質問の意図。 出来るだけ速く動作させたいとか直接的な理由はありません、 知識として知っておきたいのが質問の意図です。
ほぼ直接理解できる形式になっている。 ほぼってのは、プログラムをメモリ上にロードする際に OS が少し手を加えるから。
そもそもCPUは命令をデコードしてから実行してるからCPUが直接理解できるなんて有り得ない訳だが
デコーダも CPU 内にあるし
いや、IntelやAMDが配ってる命令リストに記述されてるもんであれば 直接解釈しているとみなして良いと思うが
>>261 exeやdllは必ずしもCPUネイティブなマシン語とは限らんぞ。
/clrでコンパイルしたらMSILになるからな。
そうか cl だとそれがあったか
マイクロプログラムってソフトウェアなのかハードウェアなのかよくわからんよな。
Win32APIで.NETのexeからリソースを取り出すのってどうすればいいの? FindResourceじゃ取れないし
アンマネージホスト用のインタフェース・関数がmscoree.dllとかから出ているから、 それを使ってやればいいんじゃないかな? CLRを読み込んで、アセンブリ (EXE)を読み込んだら、 あとはCOMインタフェースで.NET Frameworkクラスライブラリを使う。 実際できるかどうかわからないけど、100%ネイティブでやれるとしたらこんな感じのはず。
271 :
デフォルトの名無しさん :2008/04/28(月) 04:50:39
GetGlyphOutline で TrueType font の情報を取ってきているんですが、 OUTLINETEXTMETRIC 構造体の otmsCapEmHeight って何の値が入っているか 知っている方いらっしゃいますか。 MSのヘルプ系には Not supported.ってしか書いてないんですよね そのわりにはしっかり値入ってるし、どうもほしい値っぽいし・・・
Caption Embed Height キャプションに配置した時の高さ 勘で言った。気にしないでくれ
274 :
デフォルトの名無しさん :2008/04/28(月) 15:46:22
32bitOS上で、32bitアプリは特別なことしないとユーザー2GB、 カーネル2GBですよね。 64bitOS上だと、この2GB&2GBは変わらないのでしょうか? ちとスレ違いかも知れんけどWin32アプリの仕様に関してなので、 ここで質問してみました。 ググっても資料見つかんなかったです。検索下手ですね。すみません
>>274 これがそれっぽい?
http://msdn2.microsoft.com/en-us/library/aa384219 (VS.85).aspx
>On the x64 processor, each 32-bit application receives 4 GB virtual address space in the WOW64 environment,
>if the application has the IMAGE_FILE_LARGE_ADDRESS_AWARE flag set in the image header.
>If this flag is not set, the 32-bit application receives 2 GB virtual address space.
64bitOS上で、32bitアプリってこと? リンカでスイッチ入れない場合は上限2GBでかわらない。 入れた場合は4GBまで使える。
ファイルパスが長い場合に途中を...に置き換えてくれる関数みたいに 指定された長さ以下になるまで8.3形式に縮めてくれる関数ないですか。
>>279 上のほうはPathCompactPath(Ex)
283 :
282 :2008/04/28(月) 17:01:52
質問ちゃんと読んでなかった。忘れて
なんでお前らそんなに物知りなんだ……?
・指定された長さ以下になるまで縮める PathCompactPath、PathCompactPathEx、DrawTextEx ・8.3形式に縮める GetShortPathName ・指定された長さ以下になるまで8.3形式に縮める ???
>>275 >>276 ありがとん
例の3GBスイッチ入れたら64bitOS上でユーザー4GBですね。
もうこれで十分だああああ。
64bitアプリを作るのはいつのことになるやら…
>>272 ぐぐっただけだが。
ttp://source.winehq.org/source/dlls/gdi/freetype.c?v=wine20011226 には「potm->otmsCapEmHeight = pOS2->sCapHeight」と書いてある。
で、「sCapHeight」を調べたら
ttp://www.microsoft.com/OpenType/OTSpec/os2.htm This metric specifies the distance between the baseline and the approximate
height of uppercase letters measured in FUnits. This value would normally be specified
by a type designer but in situations where that is not possible, for example when a
legacy font is being converted, the value may be set equal to the top of the unscaled
and unhinted glyph bounding box of the glyph encoded at U+0048 (LATIN CAPITAL
LETTER H). If no glyph is encoded in this position the field should be set to 0.
This metric, if specified, can be used in systems that specify type size by capital height
measured in millimeters. It can also be used as an alignment metric; the top of a drop
capital, for instance, can be aligned to the sCapHeight metric of the first line of text.
日本語でおk
wineのソースかよ
>286 例の3GBスイッチって何?
>>290 link.exe /LARGEADDRESSAWARE
どこらへんが3GBなの?
ヒントもらったんだから少しは調べて聞けよ・・
boot.iniに仕込むほうの/3GBと紛らわしくてイケナイし、 内実がしめしているものと意味合いが異なりすぎるのに LARGEADDRESSAWAREを3GBスイッチとか言うのはなぜ?
↑話を理解してない馬鹿
>>252 実際にやったことある。
もう必要ないページが物理メモリに残って、また必要になるページが追い出されて、
ぐだぐだな状態になったよ。
ワーキングセットを自分でトリムすりゃいいんだろうけど、
そしたら自分に必要なページまで削られちまうかも。
>>294 大いに関係ある。
/LARGEADDRESSAWARE付けたEXEが実際に2GB超のメモリを使うには、
boot.iniで/3GBを入れていないといけない。
(あるいは上に話があったように64ビットWindowsにするか)
2000だとシステム空間は減るのにユーザのメモリ空間は変わらないんだよな、確か
煽り目的の人はシンデイイヨ
300 :
272 :2008/04/29(火) 01:22:40
>>287 ありがとう
そのあたりも調べてみます。
すみません。質問させていただけますでしょうか。 今現在、SetTimerを用いてWM_TIMERを送ってもらっているのですが、 タイマーの精度が低いので、timeGetTime関数を使ってみようと思ったのですが これがうまくいきません。 具体的なやり方のようなものをご存知の方がいらっしゃいましたら、ご教示くださいませ
マルチメディアタイマーつかっとけ
パフォーマンスカウンタで測りながらループが最強だと思う
ちゃんとループにSleep(0);を挟んでおけよ
system("cls"); みたいな動作する関数って何ですか?
VOID SystemCLS(VOID){ system("cls"); }
system("cls"); これを使わなくてもコンソール画面をクリアして カーソルを一番左上に持っていく事はできますか?
CreateProcessに変更すればおk
msvcrt.dllがKnownDLLsの一つだからCランタイム関数もWin32APIだろう まあ"msvcrt.dll"にリンクできるコンパイラ(VC6,DDK,gccなど)を使ってればの話だが
どうやって?
非同期でwav再生してて、wavの再生位置が1分に来たら このメッセージを表示 とかどうやったらできる?
sndPlaySound("c:\\test.wav", SND_ASYNC); Sleep(60000); MessageBox(NULL, "このメッセージを表示", NULL, 0);
>>301 マイクロソフトのサンプルはすべてチェックしたか?
>>303 パフォーマンスカウンターは正確とは限らない。
一部のCPUでは、CPUが省電力機能でクロックが低下すると、パフォーマンスカウンターまで遅くなる。
また、複数のコアを持つCPUでは、パフォーマンスカウンターの読み出しには結構なコストがかかる。
(かといってRDTSC命令(だったかな)を直に呼ぶのはダメだ。マルチプロセッサやマルチコアなど、
カウンタが複数ある場合、それらが同一にカウント開始するとは限らないからだ。)
GetAsyncKeyStateでキーの押下状態を取得したんですが、 3つ以上のキーを同時に押下するとき、いくつかの組み合わせでは最後に押したキーが押下されてない事になっています。 たとえばASDやSDFなどでは3つとも取得できていますが、 DFGやHJKをD→F→GやH→J→Kの順番で押していくとDFやHJの2つしか押下されてない事になっていて、 同様にD→G→FやH→K→Jの順番で押していくとDGやHKの2つしか押下されていない事になっています。 何か解決のヒントでもあれば教えてください。 ちなみにGetKeyStateやGetKeyboardStateを使っても同様の現象が発生していました。
>>307 MSDNライブラリで、
WriteConsole
のページを開いて目次を同期し、そこのあたりのAPIを一通り見れ。
>>314 Sleep(60000)が同期だろうが。
茶化した回答しかできんなら黙っとれ。
>>316 まずは、あなたの使っているキーボードが、Nキー・ロールオーバーを保証していることを確認せよ。
また、同時押下のキーに制限がないことを確認せよ。
そこいらのキーボードはコスト削減のために、
(シフト系の同時押下前提のキーを除いて)
複数のキーの同時押下を検出できない
または、誤検出するような設計になっている。
>>319 あー・・・なるほど。
1000円くらいの安物なので多分対応してないでしょうね・・・。
確認してみます。
ありがとうございます。
Nキー・ロールオーバーを謳ってるキーボードでも、 PS/2接続ならOKだが、 USB接続だと6キーまでという制限があったりするらしいぞ。
PS/2接続のRealforce使ってるから、GetKeyboardStateで試してみたら、 本当にいくらでも同時押し下げを認識するのな。 別に無制限の同時押し下げのために使ってるわけじゃないが。
>>318 sndPlaySound("c:\\test.wav", SND_ASYNC);
CloseHandle(CreateThread(..., ThreadFunc, ...));
DWORD WINAPI ThreadFunc(void* p)
{
Sleep(60000);
MessageBox(NULL, "このメッセージを表示", NULL, 0);
return 0;
}
というか
>>314 のレス内容からこの程度の応用すら思い付かない奴は
プログラマに向いていないので転職をおすすめする
sndPlaySound使う時点でプログラマに向いてないと思うがw
非同期ってのは、そういう意味じゃないだろ。
>>314 や
>>323 は、
60秒後に
このメッセージを表示
することだよな。
それを求めていたら、そういう質問になるだろう。
>>313 の質問は、
> 非同期でwav再生してて、wavの再生位置が1分に来たら
> このメッセージを表示
である。
言葉を補うと、
すでに非同期で再生しているwavが、
その再生位置が1分のところに来たら
このメッセージを表示
となるだろう。
どこまで再生しているのか不明な以上、
Sleepなんかじゃ話にならない。
wavの再生速度を変えないなら、再生位置が1分になるのは再生してから1分後だろう
音とびなどの特殊状況を考えなければね
今時wavの再生ごときで音とびなんてするかよ
>>331 こういう奴って、実際にやったことないんだろうなぁ
>>332 仮に音とびしても「再生位置1分」と実時間とのずれなんて誤差範囲だろ
お前のPCでは1分のwavを再生するのに2分かかるほど音とびするのか?
sndPlaySoundから制御が返った瞬間に、再生開始されてると、いったい誰が保証してくれるんだ?
保証されていないものに頼ることこそ、プログラマに向いてない。
メモリ上にwavを読みこんであったとしても、そいつが物理メモリ上になかったら?
ファイルから直に再生するときに、CD-ROMなどのアクセスに時間のかかるデバイス上にあったら?
しかも、同時に他のアクセスが発生して、当該ファイルの読込みが途切れたら?
>>329 ループ再生していたら、再生開始から1分後とは限らない。
それに、先頭から再生しているのかどうかも、わからんし、
途中で一時停止するかもしれん。
>>334 お前ムキになりすぎ
そもそもsndPlaySoundは一時停止なんてできないし、
そんな事を言い出したらDirectSoundのコールバックやらを使っても正確に1分かどうかなんて分からんぞ
目的によって手段を選べばいい
ノートPC動かすとHDDのヘッドがリトラクトして簡単に音飛びするよ。 それも3秒とかの単位で。 Sleepで時間あわせなんてナンセンス。 定期的に再生位置を読みにいくしかないんじゃね。
> ノートPC動かすとHDDのヘッドがリトラクトして そんな使い方してたらHDD壊れるだろw
>>335 sndPlaySoundを使うことを前提にして話をするなよ。
>>338 壊れないんだな、これが。
何年も前から、ノートPCのHDDには加速度センサが付いていて、
動きはじめた時点でヘッドを安全領域に移動させはじめるのよ。
衝撃が加わるであろう頃には、かなりの衝撃に耐えられる状態になる。
お前ら雑談はそろそろ終わりにしろ
DirectSoundって廃止されるんじゃないの? XAudioのせいで。
VIPに帰れよおまえら
Win32APIの質問しにくい状況だよね。。 MFCやらDirectXやら雑談スレになってる
質問してくれくれ
次スレからはWin32API雑談箱でいいだろ
約一名、わざと変な回答をして荒らしている人がいるからなぁ。
350 :
313 :2008/04/29(火) 11:31:09
タイヘンな事になってしまったみたいでナンカゴメン・・・
>>337 の>定期的に再生位置を読みにいくしかないんじゃね。
ってどうやればできる?
DirectSoundならわかるよ
早速の回答ありがと ほんとごめんね
msdnしんでない?
生きてた
Content not found って表示されるorz
Sleep( DWORD ms)
このAPIが呼び出されてスレッドが休止された時点から少なくとも
msミリ秒はスレッドの再開が無い。
但しSleep内でスレッドが休止され再開されるまでブロック
(戻ってこない)ことが保証されているかどうか不明
(仮に現時点そうだとしても将来に渡る永続的な保証は無いと思うべき)
最も無難な解釈は、「このAPIが呼び出されてから次のスレッド休止期間
がmsミリ秒以上であることが保証される」
といった程度。
こういうのをドキュメントから読み取れないとな。
>>314 の解答は、ある意味最適解だよ。APIの利用法で実績例が少ない
ものは安全性が低くなる。
殆どのAPIは他の目的で作られたもので汎用性を考えて作られていないし、
今更作り直すことすら出来ない。(その意味で仕様が安定してるという
理由だけで使われているとすら言える)
あくまでも使用者の自己責任という前提でエクスポート(渋々に使用許可)
されてるものに過ぎない。
>>356 もうそういうつっこみはいんでない?
ネタをネタとして(ry
彼のGWを費やしてゴミレスをまきつづけるという決心は誰にもいさめられはしないのだ。
sndPlaySoundする前にCreateThreadで別スレッド作って、 別スレッドでSleep(60000)でその後にメッセージ出せば良いと思う。
361 :
デフォルトの名無しさん :2008/04/29(火) 14:20:54
WindowsVistaでサービスアプリケーションを作ってるんですが、 タスクトレイ(通知領域)にアイコンをだすにはどうすればいいですか? XPではNotifyIconを使って動いていたのですが、 Vistaではセッションが分離されたようで動かなくなりました。 よろしくおねがいします。
公開WindowsAPIだけを用いてまともな(信頼出来る) リアルタイムアプリ作るのは不可能だと思う それが嫌ならWindows使わないほうがいいと思う
>>361 タスクトレイアプリを別exeで作って
そいつをCreateProcessAsUserだかなんだかでデスクトップに注入しろ
タスクトレイアプリとの通信方法は自分で考えろ
365 :
デフォルトの名無しさん :2008/04/29(火) 14:43:07
366 :
↑ :2008/04/29(火) 14:45:54
話を理解してない馬鹿
↑話を理解してない馬鹿
春だねぇ
Windowsにまともなリアルタイム性が期待できないことぐらい誰でも知ってるし誰もそんな話はしていない そうやって勝手な雑談ネタを持ち込もうとしたら叩かれて当然
同じ宛先の郵便物を別のポストに僅かな時間差で入れた場合 先に入れたほうが先に届くことが保証されるか? 常識と教育が必要な知識との微妙な境界領域だろうが 一般的には保証されてると信じたほうが悪いと判決される。
保証されると信じるわけのないことを喩えに出されても困るが。
質問者が質問する ↓ 質問内容が飛躍してスレ住人が雑談 ↓ エスカレートしすぎて当事者以外は手がつけられなくなる ↓ 質問者が「ごめんなさい」レス この流れの永久ループだな 謝るべきは雑談しているカス共だろ
みんな自己表現しすぎなのが問題かと・・・
「俺はこんな事まで考慮した上でレスしてんだぞ フフン」ってのがそこらじゅうのレスから感じられる だから何?って感じなんだが
API仕様情報なんて所詮、うわさ話の域を出ない。 だから、話が脱線していくのは仕方がないでしょ 誰も本当の事知ってる訳じゃないし。 断片情報のよせ集めでしかないからね。
MSDNからDirectShowの日本語ドキュメントすべて削除されたみたい
XP、Vistaで時間が経過した場合にシステムがスクリーンセーバーを起動できるかを 取得したいのですが、良い方法がありましたらアドバイスお願いします。 ・分かっていること スクリーンセーバーの有効無効、SCRファイル名は SystemParametersInfo で取得 SCRファイルが存在するか否かは GetFileAttributes や FindFirstFile など ・詰まっていること アクティブウィンドウが WM_SYSCOMMAND の SC_SCREENSAVE をどう処理するか ・試してみたこと/調べてみたこと DefWindowProc の APIフック後、SC_SCREENSAVE を投げて届くか監視 ダイアログアプリでは呼ばれず、GINA の WlxScreenSaverNotify での拒否も未考慮で× GINAを実装し、SC_SCREENSAVE を投げて WlxScreenSaverNotify が呼ばれるか監視 VistaではGINAが廃止され、ISensLogon::StartScreenSaver は代替にならず× CreateDesktopW/A を APIフック後 SC_SCREENSAVE を投げて "Screen-saver" な デスクトップ作成要求が発生するかを監視 winlogon.exe に対しては APIフックが失敗してしまい× ・スキル不足で試せていないこと NtUserCreateDesktop をカーネルAPIフック後 SC_SCREENSAVE を投げて、以下略 そもそも、ただスクリーンセーバーが起動出来るか確認したいだけなのに APIフックまで持ち出さなければならないのか…。
上にもあるけど 非同期wav再生 →再生位置取得 →位置により別の文字(歌詞でも)表示 ってSleepが手っ取り早いんかな 歌詞表示はコンソールなんだけど・・・
>>378 そもそも何でもAPIフックで済まそうという思考が以下略
例えば /* 取得の前準備 */ ・・・・・・・・・・・・・・・ ・・・・・・・・・・・・・・・ /* 再生位置取得 */ ・・・・・・・・・・・・・・・ ・・・・・・・・・・・・・・・ /* 終了 */ 見たいな感じで 最小コード誰かplz
>>380 全くその通りなのですが、色々調べた結果APIフックにいってしまいました。
APIフックがしたいわけではないので、どなたかよい方法があれば…。
スクリーンセーバーの実行処理なんてのはシステムの管轄だから、アプリ側では それを抑止する(WM_SYSCOMMAND/SC_SCREENSAVEに応答する)以上は触るなという事だろう 要するに 「スクリーンセーバーを起動できるかどうか」 ではなくて 「スクリーンセーバーが起動されようとしている時にどうするか」 だけを考えろ、と。
>>361 サービスが直にアイコンを出すのではなく、
ログオンしているユーザと対話するためのEXEを作り、
そのEXEがサービスと通信して適宜、アイコンを表示すべし。
>>374 いろいろと考慮して、行儀良くAPIを使うのは、基本中の基本。
たまたま動いているからOKという考え方だと痛い目にあう。
>>364 > そいつをCreateProcessAsUserだかなんだかでデスクトップに注入
スタートアップに登録でいいと思う。
>>387 2chステレオでただ音を出すだけなら、今後も、互換性あるんじゃない?
391 :
デフォルトの名無しさん :2008/04/29(火) 23:13:07
>>356 こういうことじゃないのか。
>0 を指定すると、スレッドは、実行の準備ができている同じ優先順位の
>ほかのスレッドに残りのタイムスライスを譲ります。
>>375 同意。本当の事はバージョン限定。
>>389 たまたま動いてるからOKだなんて言わなかったけど?(笑)
明示的には言ってないが、暗にそういう前提で話をしてたろ。
うるせぇよ雑談で荒らすな
>>387 その記事を書いた時点で記者はXAudio 2のことを全く知らなかったみたいだがな。
>>385 レスどうもです。一筋縄ではいかなそうですね。
NtUserCreateDesktop のフックを試してみて、無理そうだったら
アイディアがもう無いので諦めたいと思います。
なぜスクリーンセイバーが起動できるか取得したい動機を知りたい
NtUserCreateDesktop ってエクスポートすらされてないじゃん スクリーンセイバー相手に超乙
APIで出来ないことには手を出すなってのがMSの考えだろ 大体NtUserCreateDesktopなんて名前からしてモロNT依存だし Win32がNT専用じゃない(なかった)事を考えるとその行為がいかに馬鹿げているか分かるだろうし そんな事にいちいちSSDTフックを持ち出していたら何のためにAPIがあるのか分からん
それは真のプログラマとはいえない。 UndocumentedなAPIを使いこなしてこそ、真のプログラマというものだろう。 公開APIなんぞ、M$の手のひらで踊らされているだけに過ぎない。 おれは公開APIしか使わないけどね。
対案も出せないくせに、なぜそこまで否定するのかわからん 質問者もその辺は重々承知だろうし、勝手にやらせればいいだろ
俺様定義の「真のプログラマ」なんて持ち出されてもなぁ。 ていうか「真のプログラマ」ってネタだよな。
>>402 何が目的なのか、わからないから、
代替案を提案しようがないのだが。
こういう、荒れるor雑談となる原因を質問者自身が持ち込むのも勘弁してほしい。 IsScreenSaverEnabledなんてAPIが無い以上Win32APIレベルで無理なのは重々承知のはず。 その上でカーネルAPIのフックなどを持ち込んで「他に良い方法ありませんか?」なんて 正直、知識をひけらかしたいだけじゃないのかとも思ってしまう。
知らなきゃ黙ってればいいだけだろ
また温め納豆か?
調べてないから適当な事言うけど、 スクリーンセーバーの基本設定はレジストリに書かれてる訳じゃないのか?
>>408 いまスクリーンセーバーを起動しようとしたら、
誰がそれに反対するかは、
実際にお伺いを立ててみないとわからないのよ。
誰がそれに反対するのか調べるためだけにカーネルモードドライバを組み込むのか 馬鹿馬鹿しい
ああ、起動が阻害されるかどうかをチェックしたいのか・・・。
じゃあスクリーンセーバ起動してみたらいいじゃん
誰が起動を阻止するかなんてのはお前の気にする所ではないということだ 他のプロセスが何をしようが知ったことではない、マルチタスクの基本 それが分からんようなら勝手にドライバでも何でも作ってろ
×誰がそれに反対するかは ○誰かがそれに反対するかは
分からない人のレス要らないから。
特に何もしないスクリーンセーバーを作って、 スクリーンセーバーを一時的にそれに変更し、それを起動してみる。 起動できた場合はそのスクリーンセーバーからメッセージを送ってもらう。 こんなんでどうなんだ?
>>415 「知っている」という事象が存在しない命題に対して「知らないならレスするな」は矛盾している。
つまり、お前も
>>406 も質問者の
>>378 自身も単なる荒らしに過ぎないということ。
自身の正しさを証明できませんってことで
return false;
Win32APIで出来ない事は「知っている」
休日に話進められても参加できんな−
俺と話すか?
今時Win32APIなんて雑談のネタにしかならないのがよく分かるスレだな
雑談スレへようこそ
426 :
デフォルトの名無しさん :2008/04/30(水) 13:31:55
荒らすなよ。興味ないのなら別のスレ行けよ。 わざわざwin32API勉強してる奴の妨害しなくてもいいだろ? 嫌がらせ受ける側の気持ちになれよ
ごめんね
すんませんでした…
今更win32apiを勉強するなんて時間の無駄 他の勉強時間に使え
それは言い過ぎ Windowsを使う場合APIは避けて通れない道の一つ でもCやVC++でするのは、迂遠かもな。
っ C#&WPF
VBやDelphiから入った連中はCreateProcessの引数すら覚えてないコピペ職人ばかりだろw
WPFで作られたまともなモノを見たことないんだけど
また水掛け論の悪寒
>>433 んなもん覚えるのは脳細胞の無駄づかい。
IDEなら引数の形式が表示されるし、
そうでないにしても、
MSDNライブラリで引けば一瞬で表示される。
俺もCreateWindowExとか未だに引数覚えてないな だってVB5/VC6未満の開発環境使った事ないし
俺が引数を覚えているAPIなんてSleepと引数無しのやつだけだ。 他はIDEのヒントがないと自信ないな。
そんなん使いまわし(過去に使ったソースからコピペetc)でおk
オレも引数なんてほとんど覚えてないがCreateFontは大体そらで書ける気がする
ウィンドウメッセージやウィンドウスタイルの一覧はどこで定義されていますか?
ヘッダのフォルダに検索掛ければいいだろ!!!!!11
大抵はWinUser.h,CommCtrl.hあたりか
445 :
デフォルトの名無しさん :2008/04/30(水) 17:13:14
いきなりですが、質問です。 Office Word にAPIを使って文字を入力したい(普通の文章)のですが、 たとえば、ExcelのVBAを使用して、sheetのセルに入力された文字列 を自動的にコピーして貼り付ける(でなくてもイイんですが)にはsendmessageでWM_SETTEXTや、 WM_PASTEなどを試しましたが上手くいきませんでした。 ネット検索でよく出てくる、メモ帳へのSendmessageでは上手くいきましたが Wordだと上手くいきません。 フリーソフトを使用して、_WwG(ウインドウの位置も視覚的に捉えられるソフト なので、キャレット?のある部分)というクラス名まではたどり着き、10進の ウインドウハンドルを直接入力して、試していますがダメでした。 これはSendmessageの送り先が間違っているのか、 そもそも、この方法が通用しないものなのかわかりません。 ここ数日間まったくお手上げ状態です。。。 ちなみにSendKeysなど、keyストロークを送るものではなく、 あくまでも、テキストを直接的に送ることを前提にしています。 このWordに対しての送信?が上手く行った場合、他のソフト(Officeアプリではない) への応用を考えており、その練習用としてなのですが、 何か汎用的な方法があるものなのでしょうか? また、メモ帳で上手くいって、Wordで上手くいかない理由とは (いろいろあるとは思いますが)なんでしょうか? どなたかご教授ねがいます。 長文申し訳ありません。
>>445 Office系は独自コントロールだからWM_**系は使えないよ
OLEオートメーションとか使うべし
>>445 教授できるほどAPIに詳しくはありませんが、Office系の他にもゲーム類は受け付けない可能性が高そうですね。
ターゲットアプリが判っているのなら、そのアプリでテストする方が無難でしょう。
>>443 ,444
どうもありがとうございます。
それと、もうひとつ質問があってあるウィンドウからスタイルを数値として取得したときに
それと対応する文字列?(例えば54310000なら
WS_CHILDWINDOW
WS_VISIBLE
WS_CLIPSIBLINGS
WS_VSCROLL
WS_HSCROLL
WS_MAXIMIZEBOX
を)
を取得したいと思っているのですがどのようにやればいいのでしょうか?
教えていただければ幸いです。
よろしくお願いいたします。
spy++
450 :
445 :2008/04/30(水) 17:40:28
>>446 >>447 どうもありがとうございます。
OLEオートメーションを勉強して使ってみます。
>>450 随分と>447に対して失礼なレスだな。無視するならアンカー書かなきゃいいじゃん。
>>433 ぱらめーた覚えてるって自慢されてもなあ。
APIなんか一度サブクラス化してから使うから、パラメータなんかいちいち覚えないよ。
454 :
青 :2008/04/30(水) 17:49:04
Pythonで行列の計算ってどうやればいいんですか?
>>448 ビットが立ってるかどうか調べて、自力でやるしかない。
456 :
445 :2008/04/30(水) 17:52:44
>>451 申し訳ありません。
実は、本当に操作したいアプリに対しても同じ方法で試していますが
ダメでした。そのアプリは業務用で下手をするとマズいので、
似たようなインターフェイス(MDIとか)だったので先にWordで練習しようかと。。
447さん すいませんでした。
>>455 やはりそのような方法しかないのですね。
どうもありがとうございました。
それでWordでオートメーションって練習になる気がしない。 対象のアプリケーションがオートメーションを持っている可能性なんて 限り無く0に近そう。
文字列つっこみたいならWM_CHARとかWM_KEY*とかのほうがまだ対応してそうだが。
限り無く0に近いというかゼロだろ 外部から操作されることを想定していないソフトだとまず有り得ない
ここはSendInputだな。
463 :
447 :2008/04/30(水) 18:14:08
別に私はあなたに教授も教示もしたわけじゃないので謝罪は不要ですが。 見た目は似たようなインターフェースでも、中身は全然違う可能性もあります。 wordで巧くいってもそのアプリで巧くいく保障にはなりませんし、業務用で下手をすると拙いのなら もしかしたら、そうやってメッセージを調べることでリバースエンジニアリングととられて契約違反とされるかもしれませんね。
>>463 最後の3行は余計
誰もそんな事は聞いてないし、質問者自身が「下手をするとマズい」といってるだろう
そういうレスが雑談の元になってるのに少しは自重しろ
それを言うなら>463は全て不要。勿論、>464-465でさえも。
468 :
デフォルトの名無しさん :2008/04/30(水) 19:07:12
質問箱もbuild65で終焉か・・・ 荒らしも酷いことしやがる
自演乙
終わらんよ 俺が次スレを立てる限り
こうして雑談は続く
適当に雑談するにはもってこいのWin32APIw
まあ技術の進歩が止まって渇れてるから雑談だらけなのは仕方ないな DOSやMSXなんかと同じ
こうしてこのスレはくそみそな結果に終わるのでした
デュアルやクアッドプロセッサ搭載のPCでは, 各プロセスにどのCPUコアを割り当てるか,タスクマネージャで設定できますが, これと同じようなことが出来るAPIってありますか? プロセスが使用するCPUコアを指定したいのです。
SetProcessAffinityMask かな。
>>478 おおまさに探し求めていたものですありがと〜
大政小政
CSVのデータを読み込みたいのですが strtok以外によい方法はありませんか?
まあ、strchr を使うとか、1文字ずつ普通に比較して行くとか、 そんなところじゃね。 ところで、コンマを含むデータを扱わない前提でいいのか?
スレ違いだけど、strtok()使うくらいならsscanf()で"%[^,],%n"
それ用のAPIみたいなのは無いみたいですね 言われてみればsscanfのほうが簡単に書けそうです コンマは扱わないのでsscanfでやってみます。ありがとう。
このスレらしいものを挙げるとしたらODBCとかExcelオートメーションとかかな。 微妙にスレ違いのメンツだけど。
ADO.NET ・・もスレ違いか
パーサ書いてもたいした手間じゃない気もするが
CSVには明確な企画が存在しないからどの程度の方言を許容するかでえらい大変なことに。
>488 RFC4180
規格があっても皆が従わなければ意味がない。 CSVじゃないけどよくあるMicrosoft独自仕様とか。
どっちかってーとExcelCSVが標準というかなんとゆーか。
何でも言える事だがルールが全てじゃないしな 間違ったルールだってある
次の奴、「(ry」とか書いたら樹海行きな
(ry
こうして雑談は続く
・・・3年後
・・・7年後
・・・11年後
504 :
デフォルトの名無しさん :2008/05/02(金) 12:00:30
・・・13年後
・・・17年後
そして誰もいなくなった
CSVはboost::spiritにサンプル実装があったような
つまり、このスレ的な回答で言うと、 そんなAPIは無いという事で
結論:CSVぐらい自分でパースしろ --終了--
Excel 関連の COM に何かあればいいんだろうけどねえ。
ADOでJET使えばいいじゃない
同一スレッド以外からのSend/PostMessageをブロックしたいけど無理ですか?
>>513 WM_PAINT WM_KEYDOWN WM_??? は誰が投げますか?
なら最初からそう書けと・・・
それぐらい察してほしかったってのが本音 同一スレッド以外からSend/PostMessageされたWM_APP+???をブロックしたいけど無理ですか?
他スレッドから投げられたものか判断する方法は分かるが。
それぐらい察してほしかったってのが本音
521 :
デフォルトの名無しさん :2008/05/02(金) 21:53:54
522 :
518 :2008/05/02(金) 21:56:31
「またフックか」って言われるから言いたくないとだけ
それぐらい察してほしかったってのが本音
>>522 フックしないと無理なら諦めます
まぁデスクトップのListViewに
PostMessage(hwnd, LVM_INSERTITEM, 0, 0xcccccccc);
とかすると落ちるから無理だろうとは思ってたけど
なんでどのスレッドからのメッセージなのか取得するAPIを用意してないのかなぁ
それぐらい察してほしかったってのが本音
よそのスレッドからSendされているかどうかは InSendMessageやReplyMessageの戻り値を見ればわかる。 この関数、Postは無理だけど。
527を今日一番輝いていたレスに認定
>>527 そんな函数あるのか……と思ったらマジでありやがるw
MSすげぇw 知ってるおまえさんもすげぇww
530 :
513 :2008/05/02(金) 23:07:28
え?やだよ?
>>529 MSDNで関連API一覧を眺めるとかしようぜ。
メッセージ関連なんて20個くらいしかないんだから。
それぐらい察してほしかったってのが本音
↑話を理解してない馬鹿
経験不足の奴には察することはできない。
そもそもWM_PAINTやWM_KEY**、WM_MOUSE**などは
普通はOSが内部でPostしてるメッセージだから
>>514 のような疑問を持つ奴にまともな回答なんてできるはずが無い。
というわけで
>>514 君には荒れた責任を取ってもらおう。
544 :
デフォルトの名無しさん :2008/05/03(土) 08:54:15
C++初心者です。 ファイルマッピングとかどうやって使えますか?
ググれカス
546 :
デフォルトの名無しさん :2008/05/03(土) 09:35:21
「ググれカス」とはどういう意味ですか。 何語ですか?
C言語
>>546 日本語
グーグルで調べろよこのカスが!
って意味
通りがかりですみませんが、
>>525 を見ての便乗質問です。
> デスクトップのListViewに
> PostMessage(hwnd, LVM_INSERTITEM, 0, 0xcccccccc);
> とかすると落ちる
これって、単に LVM_INSERTITEM における実装の怠慢なのでしょうか。
それとも、一般にウィンドウプロシージャ側ではポインタとして
与えられたパラメータの妥当性はチェックしないものなのでしょうか。
推測ですが、いちいちポインタの妥当性をチェックするのは面倒だし
実行時間もかかるので、チェックは行っていないような気がします。
しかしそうすると、他のプロセスからのウィンドウメッセージによる
攻撃を受け入れてしまうことになりますよね。
先輩プログラマの皆さんはどのようにコーディングされていますか?
よっぽどセキュリティに気をつかった実装でもなけりゃ、他のプロセスからの 悪意のメッセージ攻撃なんて想定しない。 悪意のあるプロセスが実行されている時点でそのマシンはもうダメなんだし、 ターミネートプロセスされたらどうするんだって話になる。 ただ、パラメータチェックすること自体は、 バグ対策とか、モジュールの独立性確保の意味で普通にやるだろ。
そもそもプロセス超えているんだから、おまえのメモリアドレス渡しても動くわけが無いだろ。 ちょっとは考えろよ。 Windowsが面倒を見てくれるのは一部の文字列をやり取りするメッセージだけだ。 LVM_INSERTITEMはWM_USERなんだから、ウインドウクラス独自のメッセージなんだよ。 だからプロセスをまたいでやり取りはできない。 どうしてもやりたきゃ、相手のプロセスにコード注入しやがれ。
> LVM_INSERTITEMはWM_USERなんだから ハイ、知ったか乙
WM_USERは0x0400〜0x7FFFで、LVM_INSERTITEMは0x1000 +7 or +77だから WM_USERの範囲内にあるな。
WM_USERなんて名前だから、自作アプリの独自メッセージはそこから使えって意味だと思ってた俺。 そういうのはWM_APPからって、ややっこしいんだよ!逆だろ名前! せめてWM_USERだけでもなんとかならんかったのか。
WM_USER+???を使っている物(Toolbarなど)と、そうでない物(ListViewなど)があるのは何故だろう
何か理由でもあるのだろうか・・・
>>554 Win16→Win32でコモンコントロールが大量に追加されてWM_USER未満では足りなくなったから
WindowsのコントロールがWM_USER以降を使うようになってWM_APPが定義されたかと
Win16時代のAPIヘルプにはこう書いてある。
> 0〜WM_USER − 1 Windowsが使用するために予約されているメッセージです。
> WM_USER〜0x7FFF プライベート ウィンドウ クラスが使用する整数メッセージです。
> 0x8000〜0xBFFF Windowsが使用するために予約されているメッセージです。
> 0xC000〜0xFFFF アプリケーションが使用する文字列メッセージです。
こういう話は面白いから許容
WM_USERはuser32.dllが使う場所かと思っていました
558 :
549 :2008/05/03(土) 13:03:19
>>550 どうもありがとうございます。そういうことになりそうですね…。
確かに、他から TerminateProcess できてしまうことを考えると、
悪意のある攻撃を想定することはあまり意味がないですね。
>>551 >>549 の説明不足でしたかね…すみません。
ポインタの値が、プロセス境界を超えた時点で意味がなくなることは理解しています。
動作させたいのではなく、他のプロセスからの無意味なアクセスを拒否したかったのです。
>>558 じゃ具体的にどうやるんだ。
誰がメッセージを送ったのか知る方法は無いぞ。
アドレスだって、予約されてるとか、コミットされてるぐらいしかわからん。
同一デスクトップ内の同一権限のアプリにイタズラされることを想定するなんて かなーり無意味なことだと思うが
そういう事が簡単に出来てしまうのもどうかと思うぞ 今更変えられないのも分かるけどな
562 :
549 :2008/05/03(土) 14:18:00
>>559 アドレスから直接判断するのは難しいので、例えば __try 〜 __except の
中で中身を読んで値をチェックすれば可能かなと思っていました。
もちろん、この方法にも限界があるような気はしますけど…。
>>560 そうかもしれません。ただ、仮に攻撃を想定しないでコーディングして、
>>525 に書かれているようなことをされてアプリが落ちてしまったとき、
実際は送った側に問題があるにもかかわらず、落ちたアプリの側に
問題があるように見えてしまうのが気持ち悪かったというのはあります。
気持ち悪さの解消のためにここまで引っ張ったのかよ あほらしい
564 :
デフォルトの名無しさん :2008/05/03(土) 14:59:13
↑話を理解してない馬鹿
565 :
デフォルトの名無しさん :2008/05/03(土) 15:04:37
↑話を理解してない馬鹿
566 :
549 :2008/05/03(土) 15:07:30
>>563 ちょっと気になったものですから、この機会に質問させていただきました。
私の疑問は
>>550 さんのお返事で解消できましたのでこれにて消えることにします。
他にも不快な思いをした方がいらっしゃいましたら、申し訳ありませんでした。
>>567 それはVirtualAlloc、WriteProcessMemory、CreateRemoteThread辺りでDLL注入してるだけじゃないの
IsBadReadPtr でも使っとけ
ところで、obsoleteを動詞として使う用法ってどの程度一般的なの? 辞書によっては載ってるのと載ってないのとあるんだけど。
572 :
デフォルトの名無しさん :2008/05/03(土) 15:29:08
vertualalloc(笑) どこをどうすればそんな勘違いして覚えられるんだよww
ローマ字読みです
>>573 ローマ字読みでもベーチャルだろ
つうかAPI名をスペルミスする奴は打ち慣れてない(=スキルが浅い)証拠だと思うな
で、誰だよSHStripMneumonicなんてミスした奴w
せめて#defineで間違ってない名前でも定義しとけっつーの
>>571 m-wによると、1640年からだそうだ。
--
Main Entry: 2obsolete
Function: transitive verb
Inflected Form(s): obsolet・ed; obsolet・ing
Date: 1640
: to make obsolete
--
>>571 はどの程度一般的かを聞いてるのであって
何時から使われ出したかなどとは聞いていない
外野は黙っとけの典型例だな。なに文句付けてるんだか。
BNCで引いたらobsoletedを動詞で使ってる用例が3件だけあった。形容詞は340件だった。
くだらん足の引っ張り合いしてんなよ。見苦しい。 ところで、自作アプリ内で動画再生したいんだけど、Media PlayerとDirect Showどちらを使うのが良い?
好きな方を使うとよい
エディットコントロールでDrawTextのDT_WORDBREAKみたいに自動で改行してくれるように するにはどうすればいいですか?
横スクロールバーを消す
>>581 自前でデコード+DirectGraphicsで描画
DialogBoxやCreateDialogを使わず、CreateWindow等を使って同じ事をする場合、どう書きますか
ひたすらコントロールを作りまくる
>>588 dialog base unitの座標変換もやってる?
絵とか貼ると、どうせズレるからおれは無視してる。
そんな物無視でいいだろ 無視しないで中途半端に絵とか貼ってもXPのダイアログみたいに アイコンやビットマップが潰れてかえって見づらいだけ
質問が悪かったです。 DialogBox等はCreateWindowExを使ってダイアログを生成してると書いてありました。 どのようにCreateWindowExを使ってるのか知りたかったです。
>>581 VFW関数にフレームを1枚ずつデコードしてもらってGDIで描画
>>591 Old New Thingの本によくまとまっている。
邦訳版は「Windowsプログラミングの極意」
10.4.2のあたり。
こんにちは。DelphiスレでAPIスレで聞いた方がいいとアドバイスがあったので、質問します。 とりあえずマウスのフックとキーボードが押されたときに反応する(フックっていうのか?)のはできるんだけど、 電卓の例の場合はどういう種類のフック使うんでしょうか? 電卓のプログラム(OSに搭載されている)の3のボタンを9っていう数字に変えたいんですけど(というより3を押すと9を押したときと同じ動作に)
キー入れ替えソフト使ったほうが早いような・・・レジストリいじるやつ
どうしてもやりたいんであれば 対象ウィンドウのウィンドウプロシージャを入れ替えるとか… お行儀のいい方法ではないよ
ていうか3を9に変えたいなんて不可解な行為の理由が激しく気になる テンキーを携帯電話の配列にしたいの?
>>597 なんかDelスレでSetWindowsExで可能になると聞いたんですが、これを使うとなるとどのようにフックすればよろしいのでしょうか?
入れ替えるというより、3を押されたことを確認したら9というメッセージを変わりに送るという事はできますでしょうか?
>>598 とくに意味はないんですが、好奇心です^^
>>599 WriteProcessMemory、CreateRemoteThreadを使って相手プロセスにDLLを入れる
GetWindowLongでターゲットウィンドウのウィンドウプロシージャの前に自前のウィンドウプロシージャを挿入
ウィンドウメッセージのキーコードを見張って書き換えてから元のウィンドウプロシージャに渡す
>>601 ありがとうございます。
DLL INjectionってやつですか?
流れ書いてくれたおかげで、できそうです。
どうもありがとうございました。
どうしてこうフックまがいの話ばかりに…
便利だからじゃない、フック。 フックでアプリをファックするわけだよ。ぷぷっ
ほとんどが悪用だからな
ここで質問するような奴は悪用できないだろう。常考
>>601 そんな面倒な方法を取らなくてもできるだろ
ホント、フック厨は短絡思考だな
>>607 だったら書いてやれよw 悪態ついてないでさ。
SetWindowsHookExをMSDNで調べれば
>>601 のような面倒な手段を取る必要が無いぐらい分かるだろう
回答者がその程度のスキルじゃ質問者が可哀想だ
どうだろ。 別にフックする事が目的でないんなら601のような回答でも問題はないような。
キーイベントを弄るだけにWriteProcessMemoryやCreateRemoteThreadを使うのはナンセンス
>>609 SetWindowsHookEx
を使うとしたら、
SetWindowsHookEx(? @HookProc, HInstance, 0);
第一引数はなに使うんだ?
>>612 WH_GETMESSAGEかな。
GETMESSAGEフックならWM_KEYDOWN拾えるし
メッセージやパラメータの書き換えも出来たはず。
多分ね。
現在マウスのボタンが押下されてるかどうかを知る方法ってありますか キーでいうGetAsyncKeyStateのマウス版がほしいのですが・・・
>>613 595読むとマウスでボタンクリックされた場合も考慮する必要がありそうだからダメだと思う。
SetWindowsHookEx はプロセスへのDLL注入目的に使うのかと思ったら違ったのか。
>>612 自分なら SetWindowsHookEx でプロセスを注入、メッセージ投げてフックプロシージャ内から
SetWindowLongPtr でウィンドウプロシージャの差し替えってやりそう。
>>614 MSDN の GetAsyncKeyState の項目に
> GetAsyncKeyState 関数は、マウスボタンの状態も取得できます。
> ただしこの関数は、物理的なボタンのマップ先である論理的なマウスボタンの
> 状態ではなく、物理的なマウスボタンの状態を取得します。
って書いてあるけど、ダメなの?
>>615 orz
キーボードだけだと思ってた。ごめんね。
流れも読めない奴がレスすべきではない。 と煽ってみる。
619 :
デフォルトの名無しさん :2008/05/04(日) 21:51:18
どないしたらWindowsアプリ
>>619 気になるので最後まで書き込んでください。
>>615 ボタンの位置をMoveWindowで動かして変えればいいんじゃね?
てかいつの間にか電卓のボタンがButtonコントロールになってるんだな
Win98以降文字が小さくなって見づらいと思っていたらそれが原因か
>>621 感動した。なんてスマートな方法なんだ。
>>615 まず何をフックするかじゃね?
この場合は3を押された事をフックするから何使うかわからないが・・・。
自分で電卓作ればよくね? いや、電卓のUIだけ作って見えない本物のcalc.exeに計算させるとか。
電卓の改造 〜結論〜 ・calc.exeをリソースエディタで書き換える 原則的に、フックやDLL注入などで動的に書き換える必要があるのは 対象アプリが限定されていない場合、または対象アプリがCRCやMD5などで改竄チェックしている場合に留めるべき ・どうしてもフックで解決したいならSetWindowsHookEx(WH_GETMESSAGE)でWM_COMMANDを書き換える キー(0〜9、+-*/など)を押された場合もアクセラレータテーブルに基づいて TranslateAcceleratorがWM_COMMANDを発行するようになっている
>>619 何を書き込もうとしたのか気になって昼寝ができませんでした。
>>616 失礼シマスタ・・・
キーだけだとばかり・・・
619は書き込んでる途中で来客か何かあったんだろう。 鼻歌を歌ってて、おっと、ここは用心しなければ。な事態になったとかな。
猫とwisdomが久しぶりに更新。 改訂第3版とな?
誰があんなとこ見てんだよ
久米井もよくやるもんだw
Win32APIの解説サイトってあまり良質な所は無いよね まあそれに気づくのはスキルがそこそこ付いてきた頃だけど この辺、Javaや.NETとかの解説サイトはどうなんだろう・・・
良質な所って例えばどこ?
完全無欠なサイトなど存在しない
636 :
デフォルトの名無しさん :2008/05/04(日) 23:46:01
↑話を理解してない馬鹿
どんな(へぼ)サイトでも役に立つよ
SetForegroundWindow() するとウィンドウが最前面に来るけど、フォーカスだけを 当てて、ウィンドウは動かさない方法ない?
ワロタ。じゃあ書くなよw
>>639 何のためにWin98でSetForegroundWindowの仕様が変更されたのかよく考えてみよう
>>641 ,
>>643 thx. 意図的にできなくしてあるってことなのかな。
ちらつきには目をつぶって SetForegroundWindow 後に Z-order を戻すようにする予定。
只今 GetWindow と格闘中。
GetWindow( hwnd, GW_HWNDPREV ) って z-order でひとつ前のウィンドウを
返してくれるんじゃないのか? なんかおかしいぞぉぉぉーーー。
そうやって試行錯誤した後に思い通りの動作してくれたら嬉しくてタマラン
それでWinのバージョンが上がると上手く動かなくなるわけですね。わかります
結論:Vistaはカス
>>647 互換性の高さが最大のウリだったのにそれをあっさり捨ててしまうなんてな
ホントVistaはカスだ
Vistaごときで動かなくなるような、
>>647 の書くコードの方がカスだと思うがな。
APIが色々と廃止されたのでそれらを使ってるとVistaで起動すらできなくなる訳だが なぜ今更Win32APIに手を加えて互換性を損ねるのかさっぱり分からん
Undocumentedじゃ仕方ないと思いますが
Ver6だからな。仕方ない
>>650 具体的に何が廃止されたんだ? 言ってみ。
何なのこいつら。具体例具体例って(笑) バカじゃないんだから、定性的に議論しようや。 言ってるのはAPIが勝手に廃止されることの是非なんだけど。
いや馬鹿だろ
非公開のいかがわしいAPI使うほうがアホ まあ最近は独禁法がらみでいろいろ公開されるようだが。
非推奨APIを使うのが悪い
659 :
デフォルトの名無しさん :2008/05/05(月) 17:10:17
↑話を理解してない馬鹿
つうか「Vistaはカス」に過剰に反応してるとしか思えない奴がいるな MSの社員か関係者か?
じゃ、何の話をしているんだよ。 廃止されたのなんて、たまたまエクスポートされていただけでドキュメントには載っていないAPIぐらいなもんだろ。
GDIやDirectSoundも事実上廃止だろ
>>653 に答えないまま話を進めようとする馬鹿が居たのが原因。
めんどいのは、セキュリティ回りの仕様変更で動かなくなったとか、 そういうのが多いんじゃないのかな。API云々じゃなくて。
話が逸れすぎ
>>648 はAPI云々とは言っていない
↑話を理解してない馬鹿
↑話を理解している天才
669 :
デフォルトの名無しさん :2008/05/05(月) 17:25:05
GDIが無くなったAPIが廃止された。 こういうこと書いてるのは、ただの無知なんだから放置でいいかも。 技術板に来るにはあまりにも無知。
670 :
デフォルトの名無しさん :2008/05/05(月) 17:26:07
↑話を理解してない馬鹿
ほんとにAPIが無くなったとか思ってそうだな。
で、どのAPIが廃止されたって?
674 :
デフォルトの名無しさん :2008/05/05(月) 17:31:05
>>672 Win16ってまだサポートされてたのか。
びっくりだな。
お前らより長生きじゃん。
>>673 具体的には知らないけどそう思ってるってとこじゃね
今検索中かもね
↑話を理解してない馬鹿
DOS/Vって前世紀のシステムをいまだにサポートしてたとはw うけるw M$馬鹿すぎるwwwwwwwww
win16はVista 64bitで廃絶
679 :
デフォルトの名無しさん :2008/05/05(月) 17:36:24
>>678 M$も少しは賢くなったようだなw
win16ってwwww
今時そんなもん誰も使ってね〜〜〜〜〜wwwwwww
M$ってうぇうぇうぇ江戸時代かよwwwwww
結論:Vistaはカス これにて雑談は終了です。
今でも16bitアプリの保守とかあるんかな
Win32APIは悪くない。悪いのは慣習 _、_ ヽ( ,_ノ`)ノ それくらいは察して欲しかったってのが本音 へノ / ┌→ ω へ │
Win3.1上のAccessアプリの保守なら去年やった。 ファイルマネージャの使い方すら忘れてて、お客さんに聞くというていたらく。 営業は、それをダシにして「システムを更新しないと技術者が確保できません」という話をしていたようだ。
684 :
デフォルトの名無しさん :2008/05/05(月) 17:59:28
>>683 Win3.1って最近のPCでも動くのか。
>>684 今時DX4搭載だった。
それでも驚くほど軽かったが。
686 :
デフォルトの名無しさん :2008/05/05(月) 18:04:45
マイクロソフトが強い理由が垣間見える話だな。
>>684 oldnewthingのレイモンドが、どっかのアパートの管理ソフトウェアが、XP上でうごくWin16アプリだったとか言ってなかったっけ?
Vista 32bitでも大抵は動くんじゃない。
雑談は終了しましょう
Win16アプリの開発は、今に比べると常識が全く異なったな。 int func(){ int array[10000]; ...... } なんてやったらコンパイルは通っても実行時エラーで落ちる可能性大 (Windows3.1全盛期の後半で出たコンパイラじゃどーかは知らないが)
VirtualPCで動かしてね、ってことになるんだろうか
692 :
デフォルトの名無しさん :2008/05/05(月) 18:14:19
16ビットアプリをそこまでして動かしたいとは思わんけど。
Win16 ってギリギリ触ったことないんだけど、ソースレベルでは Win32 と多少 互換性あったりするの? Win32 API が増改築を繰り返す前から(要するに最初から)汚い理由が そこにある気がして。
Win16といえばセグメントレジスタだな
非公開APIっていうけど、非公開の時点でAPIじゃないと思うんだな。 内部関数を、便利だからと言って外から勝手に呼んでるようなものだろう。
だがここでネイティブAPI含む非公開APIの質問・回答が多いのも事実
非公開かどうかなんて関係ねーんだよボケが。 動かなくなることが問題だっつっとるだろ。 う ご か な く な る わかる? ある時点で動いていたら、互換を名乗るならば完全に動作しなければならない。 それが出来てないのは単なる手抜き。 ヤフー買収する金が何兆円もあるってのに、互換性には手を抜くMSはクソ。
釣りですね。わかります。
非公開APIの互換性が無くなると動かなくなるのはむしろMS製品だがw
気が滅入るような流れですね 5月だけに
/* ここまで雑談の雑談 */
/* ここまでオレの自作自演 */
{ もうずっとコメントでいい
>>704 コメントが { 〜 } の言語を教えてくれ
Pascal
707 :
デフォルトの名無しさん :2008/05/05(月) 19:57:03
そこでLinuxですよ。 Linuxはオープンソースなので互換性に関しては抜群です。 それにたった一社が保守しているにすぎないプロプラOSとは違い、将来にわたって なくなることがないのです。 今先進的な企業はLinuxに注目しています。 日本でもOmron、Turbo Linux、Just Systemといった大企業が積極的に推進しています。
このスレ的な解ではないな
突っ込みどころ満載
> 話し聞いてやる 「はなししきいてやる」って何だよ 日本語勉強してから出直して来い
動詞なんじゃね? 話しながら聞いてやるっていう
Vistaでなくなったと思われる非公開APIのいくつかは実は名前が変わってるだけ。 おそらくMS製品が使ってるんだろうな。
714 :
デフォルトの名無しさん :2008/05/05(月) 20:34:48
どうでもいいけどビスタの特別優待版が八千円くらいで売ってる。 オフィスの時より限定数が少ない。
>>713 互換モードにするとマッピングされるんだっけ?
面白いことしてくれるよなあ
はあ?
718 :
デフォルトの名無しさん :2008/05/06(火) 02:28:41
APIで1970/1/1からのミリ秒の合計って取得できるの? NtQuerySystemTimeが結構近いんだけど。。。 誰か知ってたら教えて。
time()でいいだろ
GetSystemTimeAsFileTime(1601/1/1からの100ns秒数)から計算するんだ
721 :
デフォルトの名無しさん :2008/05/06(火) 02:57:32
やっぱり計算するしかないのか。。。 有難うございました。
計算たって、 sec = sFT/10000000 - 11644473600; //((1970-1601)*365 + 92 - 3 )*24*60*60 msec = (sFT % 10000000) / 10000; だろ? ポストフィックスとか四捨五入とか略したけど。
だからCランタイムのtime関数でいいだろうが 用意されてる物を使えばいいのに何が不満なんだよ・・・
お前の態度が不満なんだ、すまない
725 :
デフォルトの名無しさん :2008/05/06(火) 03:27:08
timeでミリ秒が取得できるのならいいんだけど、 俺のマニュアルには経過秒数しか取得できないようにしか 見えないのですよ。
1000掛ければいいんじゃないの
32ビットじゃオーバーフローするから __time64_t msec = _time64(NULL) * 1000; でおk
728 :
デフォルトの名無しさん :2008/05/06(火) 04:05:09
いやいや、それだとミリ秒の部分が0埋めされてしまって 意味がないのですよ。
729 :
デフォルトの名無しさん :2008/05/06(火) 04:07:40
そっか、time()とGetSystemTimeとかでミリ秒部分を取得して 合計した方が簡単ですね。
>>728 __time64_t msec = _time64(NULL) * 1000 + (rand() % 1000);
30年後の事は心配しなくていいですか?
ひょっとしてtime構造体のミリ秒取得での計算が書いてあったから 質問者は、出来たら構造体毎差分を計算できたらいいなーって感じか
734 :
デフォルトの名無しさん :2008/05/06(火) 18:41:37
よおし、alt+tabを押してみろ
WM_PAINTで有効化忘れるのは、初心者にありがちだな。 とりあえず、BeginPaint/EndPaintやっとけ。
いや、いまどきユニプロセッサ環境でC++のプログラミングをしている奴ってどんだけ底辺なんだよ。
742 :
734 :2008/05/06(火) 20:04:15
>>736-738 ありがとうございます。
PM_PAINTにはBeginPaint/EndPaintを必ず入れる必要がある?(有効領域にするため?)
ちなみに33行目以外は某サイトからのコピペなんですが
これはコードが適切ではなかったということでしょうか?
いいか、脳みそに叩き込んどけ。 ウインドウへのHDCってのは、描画したいときに取得して、描画し終わったら解放するものだ。 いつまでも確保しているものじゃない。 そういう糞コードがVistaで動かなくなるのだ。
妙に厳しいのな
>>742 基本的にyesだ
そういううんkなサイトと格闘してきたのがこのスレのうんkたちだから
まあなんだ、その、超がんばれ
745 :
デフォルトの名無しさん :2008/05/06(火) 20:42:11
HDCを開放しない方法もあるけどな。 ビスタで動かないコードなんて初耳。
>>745 Win32的に正しくないコードを書いてるとOSのバージョンが上がると動かなくなる可能性があるという話だろ
読解力の無い奴だな
VistaになってGDI周りが全部ソフトウェアになったから、 むしろ無茶なコードでも逆に通ってしまいそうな予感。
Vistaがうんkなんだろ・・・
基本的に日本人が書いたWin32 APIの本は地雷。
751 :
デフォルトの名無しさん :2008/05/06(火) 21:18:44
中国人の書いた本がいいですよね。
そんな素晴らしいコードがどこかにあるのでしょう。
753 :
デフォルトの名無しさん :2008/05/06(火) 21:41:22
このスレには専門家がそろってるんだろ? この状況をなんとかしてくれよ。 一APIにすぎないWin32がもう100スレ超えてるくらいだから需要はある。 65スレだろ?って思うやつは歴史を勉強しよう。
ここのまとめサイトを作るんだ
本物のWindowsプログラマは、MSDN読むだけでAPIの使い方が完璧に分かるので、 そんな本など必要としない。 本物のWindowsプログラマは、初心者向けに本など書いている暇はない。 実際、MSDNだけで十分だしなぁ。
ときどきMSDNにおかしなこと書いてるけど、 ちょっとググればまさにその点を指摘してるページがすぐ見つかるからな。
757 :
デフォルトの名無しさん :2008/05/06(火) 21:47:21
Win32API質問箱が本になりましたっていうのをやるんだ。 今すぐやるんだ。
>>757 9割以上雑談なのに本になんか出来るかよ
>>741 下を見て比べてたら上を見て比べた時に絶望するよ
760 :
デフォルトの名無しさん :2008/05/06(火) 22:10:28
>>758 1000ページ2000円くらいでお願いします。
>>757 Q: ○○○
A: MSDN | ggrks
ツリービューで選択された項目によって 複数のダイアログの表示をしたいのですが、どうすればいいですか?(一つずつ表示) ーーーーーーー以下ツリービュー 親-Menu ├Menu1=Dialog1表示 ├Menu2=Dialog2表示 タブコントロールとかだと、TabCtrl_GetCurSel()等で簡単に出来るのですが、
763 :
デフォルトの名無しさん :2008/05/06(火) 22:14:51
1000ページで2000円だったら5冊くらい買ってもいいな。
つーか、MSはさっさとOSのコードを公開しる!
>>764 Windowsのバージョンは知らないけど、
ソースコードは日本の有名大学に公開されている、と聞きました。
768 :
デフォルトの名無しさん :2008/05/06(火) 23:24:51
その情報は有償になりました。(想像)
つうかそもそもWin32の質問なのか?
> ときどきMSDNにおかしなこと書いてるけど、 > ちょっとググればまさにその点を指摘してるページがすぐ見つかるからな。 バージョン、SP毎に試さなければ、おかしさは分からない
>>762 自分でダイアログを表示したり隠したりすればええがな
773 :
デフォルトの名無しさん :2008/05/07(水) 01:37:14
>>773 TVN_SELCHANGEDでも調べなさい
他にもTVITEMのstateMaskにTVIS_SELECTEDセットしてTVM_GETITEM投げるとか。
776 :
デフォルトの名無しさん :2008/05/07(水) 04:29:42
SetWindowsHookExでWH_CALLWNDPROCを指定して
フックしたメッセージをメインのプロージャに
行かないようにするにはどうすればよいですか。
と質問しようとしたけど、フックではなくて
>>601 にある方法で
プロシージャを噛ませて、return 0;してあげればできました。
ありがとうございます。
ほんとにありがとうございます。
ちなみにフックでも出来るのでしょうか?
>>776 フックの場合、メッセージの存在そのものを消すことはできないので
WM_NULLにメッセージを書き換えるのが一般的。
778 :
デフォルトの名無しさん :2008/05/07(水) 07:54:05
>>777 なるほど、ありがとうございます。
WM_NULLはこんな時に使うのですね。
ためしてみます。
>The CallWndProc hook procedure can examine the message, but it cannot modify it.
GetMsgProcはメッセージを書き換えられるけど、CallWndProcはダメなのか。 サブクラス化が一番確実だね。
サブクラス化する時はSetWindowLongPtr(GWLP_WNDPROC)を使うより SetWindowSubclassを使ったほうがいい。理由はMSDNに載ってる。 (ComCtl32 ver6以降で可能とか書いてあるけど実はComCtl32 5.x以降なら9x/2000とかでも使える)
な、なんだ(ry
EnterCriticalSectionとLeaveCriticalSectionで、 単一のCRITICAL_SECTIONしか使ってないのに あるスレッド以外のEnterのほうで止まりっぱなしなんですが 多重にEnterしてるか確認する方法ってありますか? enterオブジェクト作ってコンストラクタでenter,デストラクタでleaveしてます。 コンストラクタとデストラクタでカウントする限りには 多重にenterしていないようにみえるのですが…… 余談ですがCRITICAL_SECTIONをprintデバッグしてみたら、 98とXPで使用されてる箇所が違うみたいですね。
多重って? 他のスレッドがすでに掴んでるかどうかってこと? 同じスレッドでリエントラントかどうかってこと?
>>784 一応後者のことですかね。
同じスレッドで複数回Enterした場合、同じ回数Leaveをしてあげないと
手放してくれないじゃないですか。
他のスレッドに移動しないってことはどこかでLeaveが行われていない気がするんですよね……
CRITICAL_SECTION.RecursionCount
デッドロックでぐぐってくだされ
>>786 98では空でしたがXPで確認できました。 1ってことは多重にはEnterしてないかもしれないです……
ってことは益々謎だorz
>>787 複数のCRITICAL_SECTIONを使っていれば真っ先にデッドロックを疑いますが、
単一のCRITICAL_SECTIONしか使ってないのにデッドロックって起こり得るんですか?
クリティカルセクション内の処理がどうなってるのか知らんが 暗黙的にクリティカルセクションやらマルチスレッドやらが使われている場合があるので、ありうる
そもそもInitializeCriticalSectionを忘れてるとか
>>789 まじすかΣ(゚Д゚;
それが原因だったらどうしようもないようなorz
>>780 WinMain内の始めでやってるので大丈夫でした
一応処理の途中でdeleteしてないかもう一度確認してみます
LockSemaphore This field is misnamed; Σ(゚Д゚;エーッ! 内部的には複数のCRITICAL_SECTIONが数珠繋ぎになってるのは図で分かった。 けど、暗黙的に云々ってのは俺の英語力じゃどこに書いてるか探すだけで数日掛かりそうだ……
そもそも止まっているのは本当にEnterの所なのだろうか?
797 :
デフォルトの名無しさん :2008/05/08(木) 10:25:45
OSの言語が日本語か英語かを判断できるapiを教えてください
GetACP
CreateFontって、指定した名前のフォントが存在しないと適当な代替フォントで HFONTを作ってくれますが、これをフォントが存在しない場合はNULLを返すよう にすることはできるんでしょうか。 やはりEnumFontFamilies系で列挙して存在確認するしかない?
できない。 条件それぞれに重み付けをして、一番ペナルティの小さいフォントを選ぶから。 名前も条件の一つに過ぎない。 EnumFontFamiliesしかないというより、それ使うべきでしょう。
>>795 エンターの前後にプリント仕掛けてたからほぼ間違いないかと。
ただあれから何もしないでPC再起動してリビルドしたら普通に動き出しました
さっぱり意味が分からないまま解決?しましたorz
してないから。
49.7日起動していておかしくなったとか 例えば、「1秒間〜をする」書き方は DWORD tick = GetTickCount(); while (GetTickCount() - tick < 1000) { 〜 } と DWORD tick = GetTickCount() + 1000; while (GetTickCount() < tick) { 〜 } だと前者の方がいいとかそういうの
例外が飛んできてたとか
>>802 ですよね〜orz
原因が気になって眠れないと地震が起きるので
忘れます
>>803 ありえるかもと思ったけど
そういえば今回は時間測る処理はしてなかった
>>804 catch(...)してるけど反応なかった
WinMainに引数があるのが理解できないのですが・・ どこから渡してるのですか?
>>807 ギャグですね。 わかります。
マジレスすると五分後の世界から
ShellExecuteでプログラムを起動する時、パラメータに指定する文字数には制限があるみたいですが、 これは最大何文字までいけるのでしょうか?
>>807 WinMainはWinMainCRTStartupから呼ばれている。
まあ素直にLinkers & Loadersでも読んでろと。
つうかエントリーポイントの関数名なんてリンカのオプションで変えれるし
815 :
809 :2008/05/08(木) 23:42:47
自力で頑張ったら分かりました ありがとうございました
>>815 お前にとっての「頑張る」はググることか
ゆとり乙としか言えない
817 :
809 :2008/05/08(木) 23:55:58
ググったわけではないです^^;
地道に文字数増やしてみたかもしれないだろ・・・
ググることすらしない人間が多い中 調べると言う行為をするだけマシだろ
それもそうだw
ここは切ないインターネッツですね
そりぁあインターネットが切れてたら書き込みできないからな 切れてないインターネットなんて当然すぎて困る
今やインターネットがキレる時代ですよ
RSTのことですね。わかります。
825 :
デフォルトの名無しさん :2008/05/09(金) 11:07:35
ググれしか言えないクズはレスしないでください。
ヤフれ
ライブサーチれ
寒い
寒れ
寒るとき
アプリ自身の再起動する関数ってありますか?
CreateProcessで自分自身のexeを新たに起動すれば?
二重起動禁止にしているので自分自身を終了後に起動したいのですが?
二重起動を解禁してから (Mutexを解放するとかウィンドウを消すとかしてから) 起動させればいいじゃん?
そう言われてみればそうですね。 つか、他の方法はねーのか?
Mutexの所有権を他に割り込ませずに安全に受け渡すのは意外に難しい
スケジューラで遅延起動でもいいけど、ちょっとでも重なるとパーだし 確実にバトンタッチするには、自分のプロセス内で完結したほうがいいね。
831≠833な件
839 :
デフォルトの名無しさん :2008/05/09(金) 15:50:46
>>838 何こいつ?
どうせお前が
>>831 と言いたいんだろうけど、どうせお前も同じ事聞きたかったんだろ?
ちゃんと皆に礼言っとけクズが
何かファビョってる。
どうでもいい
>>840 最近覚えた言葉を使いたかったんですね。わかります。
「WinMainを抜けるときにはMutexは開放している」 という書き方をしているなら(普通はそうしてると思うけど)、 atexit()に自身をCreateProcessするコールバックを渡せば確実だと思う
ありがとうございます
どういたしまして
846 :
843 :2008/05/09(金) 18:07:01
どういたしまして
847 :
847 :2008/05/09(金) 18:14:00
どういたしまして
848 :
845 :2008/05/09(金) 18:26:25
どういたしまして
とかちつくちて
連休明けたのに子供が多いなあ
連休は春休みや夏休みと違って大人も休みだろ
連休明けたのに子供と精神年齢低い大人が多いなあ
さてみんな今日はどんな雑談しよっか?
低賃金重労働な プログラマ職業にしてるやつなんて 精神年齢低いだろ
むしろプログラマしてるから精神年齢が下がっていく
お、今日の話題は精神年齢か。
本人は面白いと思ってやってるから困る
確かに面白くないが、自分の感覚が一般全てに当てはまるかのような前提なのも困る
↑童貞
↓マザコン
マザコンで悪いか!
それぐらい察してほしかったってのが本音
↓ニート
鏡
↑処女
面白いの?
それぐらい察してほしかったってのが本音
うわ、そう来たか・・ ほんとうにワンパターンだな
こういうのって同じ奴が何度も書いてるだけなんだよな ここID出ないからなぁ
俺を含めて4人は居そうだな
ここまで俺の自演
うわ・・呆けないように気をつけろよ・・
これも俺の自演
うわ とか言ってる奴ガキ臭い
本当につまらない、もうちょっと頭使って面白いこと書けよ 繰り返すだけなら誰でも出来るだろ そんなんだから良いコードかけねーんだよ
それぐらい察してほしかったってのが本音
まぁ、頑張れよ
うけを狙って書いてると思ってるアホが居るな
どっちにしても面白くないって事じゃんw
それはよかった
そりゃプログラマなんて底辺の職業に就いてたら毎日散々こき使われるからこういう所で憂さ晴らししたくなるんだろ
マに限らないと思うのだが
>>875 とか
>>878 みたいのはずっとこのスレに張り付いてるんだろうな。
スレに愛がなきゃそんなこと思わないもんな
>>883 いらっしゃい
誰も居なくなって寂しかったよ
脱線するならするで面白ければ許せるが、VIP以下じゃな
MDI難しい
887 :
デフォルトの名無しさん :2008/05/10(土) 22:39:01
VirtualProtectで良く分からない現象が出て誰かお教えを… PAGE_READWRITEへの変更は許可されるんだけど、 PAGE_EXECUTE_READWRITEを指定するとGetLastErrorで 『パラメータが間違っています。』と返されました。 PAGE_READWRITEは成功するので指定したアドレスは間違って いないと思われます。上記メッセージからどんな状況が考えら れるでしょうか? DEP有効のマシンでブロックされるのを防ぐのが目的です。 DEPが無いマシンならPAGE_READWRITEのままでもOKなのですが、 今後のCPUだと対応必須になりそうなので。 よろしくお願いします。
> Windows Server 2003 and Windows XP: > This attribute is not supported by the CreateFileMapping function > until Windows XP SP2 and Windows Server 2003 SP1.
HFONTからLOGFONTを構築するには、どうすればいい?
GetObject
891 :
887 :2008/05/11(日) 09:02:11
>>888 CreateFileMappingでは非サポートと書いてあるように読めますが
VirtualProtectでも同様なんでしょうか?
CreateFileMappingでPAGE_EXECUTE_READWRITEなんて使い道あるのかな
バックドアを作ってるような物だと思うが
>>891 DEPにブロックされるのを防ぐならHeapAlloc等のメモリにVirtualProtectを使うのではなく
VirtualAllocで実行属性付きのページを確保する
MessageBox()は内部でウィンドウズメッセージを取得していますか?
895 :
デフォルトの名無しさん :2008/05/11(日) 17:52:49
WIN32APIかどうかはっきり覚えていませんが テキストファイル内にある [ ] でかこまれた部分をサーチし、そこまで、ファイルのポインタを移動してくれる API って何でしたっけ?
ini?
>>896 ですね ini ファイル内を検索(?)してくれるAPIです
GetPrivateProfileString
900 :
894 :2008/05/11(日) 18:29:00
追記です。 WindowsHook()で何故WH_GETMESSAGEで MessageBox()がフックできるのか、という疑問です。
>>900 出来ないと思う理由をまず説明してみなよ。
いっぱいツッコミ入れてくれるよ。
>>902 それでいいのか?
GetPrivateProfileSectionじゃないのか?
905 :
894 :2008/05/11(日) 19:12:11
自分の理解
アプリケーションごとのメッセージループがメッセージを取得した際に
WH_GETMESSAGEのフックプロシージャが実行される。
だからMessageBox()はメッセージを取得している。
>>903 ちょっと意図がわかりませんでした。
WH_MSGFILTERはメッセージボックスを監視できるようですが、
私が知りたいのはメッセージボックスがメッセージを投げてるのかどうか、
WH_GETMESSAGEの挙動の理解はこれで正しいのかどうかです。
>>904 正確にはそうですね ありがとうございます。
MSDNに芋づる形式にひっかかるので
908 :
広義のリソース問題? :2008/05/11(日) 21:34:47
Windows2000で ある特定のアプリ(ACDSee7)とFirefox2を同時に起動して Firefox2で画像ファイルの大量にあるサイト(Pixiv)に しばらくアクセスしていると FirefoxにBASIC認証のダイアログが出たり (Pixivはそんなアクセス制限方法は使ってない) サムネイル画像が表示されなくなったりする症状がでるんだ。 んでACDSeeを終了すると復活するんだ。 現象的にIPソケット関係かロック(ミューテックスとかセマフォとか) のオブジェクトハンドルをACDSEEがリークさせてる (+Firefoxのハンドル取得失敗エラー処理がバグってる) 気がするんだけど このへんの残量を調べるツールとか 増やしたりするレジストリキーとかだれか知ってたら教えて。 ちなみに Desktop Heap Information Monitor Tool はもう試してデスクトップヒープは十分残ってることは確認済みなんだ。
スレ違い どこがWin32APIなんだよぼけ
910 :
広義のリソース問題? :2008/05/11(日) 23:20:12
いや、Windows板じゃ ヒープとかわかんないだろうと思ってね デバッグでヒープモニタ的なものって使うでしょ? つかAPI限定でない Windowsプログラミング全般のスレってあるの?
少なくともFirefoxはオープンソースなんだから 丹念にデバッグできるだろ、量的な問題はともかくとして。
>>908 Sysinternalsの何かでプロセスが何握ってるか調べるとか?
ごめんよくわからん。
「分かってくれる人がいそうだから」という理由でスレ違いな質問を平気でする馬鹿
脳がヒープでリーク
リストビュー内のアイテムを先頭、または最後に移動したいのですが、 そのようなマクロ等ありますでしょうか?
exchange
ListView_MoveToSentou ListView_MoveToSaigo
というinline関数を自作しなさい
commctrl.hを調べていたのですが・・・ つまり、そのようなマクロは無い ↓ 自作、 ということでしょうか?
My糞ソフト (笑)
922 :
デフォルトの名無しさん :2008/05/12(月) 19:56:55
目的のアイテムが先頭にくるよう条件組んでソート
解決しました。すみません。
>>923 ソートなんてしなくても
1. アイテムの全情報をListView_GetItem
2. アイテムをListView_DeleteItem
3. 移動したい位置にListView_InsertItem
でいいだろ
おいらListViewは仮想モードでしか使ったこと無いから判らないけど Model側でswapしておしまいじゃないの。
先頭/最後に移動するのだからswapとは違くね?
↑馬鹿
知らないならレスしないでください
うざいだけです
ユニコードの文字種を文字単位で変換できるAPIってあるんでしょうか? Shift_JISでは「_mbctombb()」のような関数がありますが・・・ 「A -> A」「3 -> 3」「ア -> ア」「ア -> あ」など。 自分で調べた範囲ではユニコードで文字変換を行えるものは、 「LCMapString()」くらいしか見つかりませんでしたが、これは文字列の一括変換 なので使いにくいです。 今のアプリは文字単位で全角・半角やひらがな・カタカナなどの文字種を変換する ルーチンがあるので困っています。 現在、Shift_JISベースのアプリをユニコードベースに書き換えてるのですが、 作業量が多すぎて死にそうです。orz
数は限られてるわけだし、一覧表を作ってしまえばいいような気がする・・・ wchar_t HiraKataHanMap[][3] = { L"あアア", L"いイイ", L"うウウ", ... };
シフトJISに変換して、文字種を変換するルーチンを通したあと、再度ユニコにするw
LCMapStringに一文字ずつ渡せばいいだろ 効率?そんな物知らん
自前で表持てばいいだけだろ
↑話を理解してない馬鹿
↑単なる馬鹿
↑馬鹿
↑
↓
(^_^)v
↓
↓馬鹿
↓単なる馬鹿
↓話を理解してない馬鹿
自前で表持てばいいだけだろ
LCMapStringに一文字ずつ渡せばいいだろ 効率?そんな物知らん
APIってアピってよむんだぜ
シフトJISに変換して、文字種を変換するルーチンを通したあと、再度ユニコにするw
(T_T)v
>>936 が「あぁぁーいっくぅぅぅ・・・」の様に見えたorz
"文字列"の前にLとかTを付けるのって何ですか?
>>933 の
L"あアア"
みたいな。
マルチバイトとユニコードと差異を解消させるマクロ
Lは違うだろ ワイド文字列定数のプレフィクス
TCHARリテラルとUNICODEリテラル
L がユニコードじゃないといけないとは決まっていない
>>956 挫折なんてしないよ。あなたのような方々が代行して調べてくれるからね。
962 :
932 :2008/05/14(水) 08:13:01
なんかスレを混乱させてしまってすいません。 APIがないとなると、やっぱり自前の変換表を作るしかないんでしょうかね? あぁ・・・また作業が増える。なんか過労死しそう。
いったい何がしたいんだか 仕事なら抱え込む前に職場に相談しろよ 死んだら周りが迷惑だ
だからLCMapStringでいいだろ・・・ どうせAPIだってテーブル引きしてるだけだろうし自前でテーブル持つのと大して変わらん そもそもAPI使う気が無いならスレ違いだからここで訊くな
文字コードのミスで統合システムがクラッシュ!
MUFJの人だったのか 困るよ
968 :
デフォルトの名無しさん :2008/05/14(水) 11:00:54
自分自身のプログラムのみをターゲットにして、XPのビジュアルスタイル みたいに、プラグラムの現状のコードに『ほぼ』手を加えずに自分自身の ウインドウやボタンなどのコントロールの外観を独自に変更することって 出来ますでしょうか? やりたいことの例としては、OperaのスキンがWindowsデフォとオリジナルの スキンを選択できるので、あんな感じです。Windowsデフォのコントロール の外観も選択できることから、何かしらAPIの下のほうを差し替えるテクニ ックを使ってるように思うのですが…。 オーナードローでやっても既存コード部分が大幅な変更を強いられますし、 何かヒントがあれば教えてください。取っ掛かりもつかめていないので。 よろしくお願いします。 (裸のウインドウから全部描画ってのはなしで…)
>>953 そんな君は正規表現 [あ-ん] を見ても興奮してしまうだろう。
>>968 そもそもOperaってWindowsのコントロール使ってるの?
IEは身が目が同じだけでコントロールは全て自力描画しているが。
んなこといってもオーナードローが嫌なら 通常のコントロールと互換なコントロール作って差し替えるしかあるまい 裸のウインドウから全部描画「よりも」酷い作業量になりそうだが
973 :
968 :2008/05/14(水) 12:30:06
>>972 >通常のコントロールと互換なコントロール作って差し替える
このための資料(書籍でも)ってないでしょうか?
どう検索していいものやら、皆目分らないのです。ググってもキーワードが
悪いのか、コモンコントロールの使い方ばかり出てきます。
ねーよそんなの。 お前が全部やるんだからな。 ブラウザが自前実装なのは、それをやるだけの価値があるからやってるんだよ。
普通にチャイルドウインドウのプロシージャ書くだけだろ
知らないならレスしないでください。ウザイです
MultiByteToWideChar
char ss[]="VK_F11"; これを仮想キーコードVK_F11に変換する関数とかってありますか? GetKeyNameTextの逆バージョンみたいな
無い
無いよ
>>968 昔WM_NCPAINTなどを乗っ取りWindows98だかでXPのビジュアルスタイルの様な機能を実現するオープンソースのソフトがあって
そのソフトのサブクラス化解除に問題があって迷惑を被った記憶がある
なるほど。 お前が悪かったわけですね?
つうかIEに限らずFirefoxやOperaもウィンドウレスの自前描画だが
Windowsアプリケーションを作成する際に、 モードレスダイアログボックス等はダイアログベースで作り、 メインウィンドウ等はCreateWindow等を使って作っている事が多い様に思うのですが、 全てダイアログベースで作らないのは、何か理由があるからですか?
ダイアログで事足りるならダイアログを使う。 事足りないならダイアログを使わない。 それだけ。 ダイアログベースの Win アプリも沢山ある。
事が足りたい場合とは、例えばどのような場合でしょうか? メインウィンドウのみはCreateWindowで作り、 メインウィンドウで使うタブコントロールやリストビューをダイアログベースで作成し、 それの表示位置、サイズをメインプロシージャで変更する、 ということもありえるのでしょうか?
ダイアログで実現した方が楽そうならダイアログでやる。 そうでないならそうしない。 それだけ。
>>988 そうでない場合とは例えばどのような場合ですか?
具体的にお願いします。
>>989 プログラマの判断次第って意味が分からない?
楽そう難しそうって個人の主観でしょ?
>>990 あなたの言い方ですと、
ダイアログベースで難しい場合はダイアログベースではやらずに、CreateWindowを使うという事ですよね、
あなたの主観で答えて下さって結構ですので
そうでない場合がどのような場合であるかを教えて下さい。
993 :
デフォルトの名無しさん :2008/05/14(水) 23:39:20
間違えました
>>990 あなたの言い方ですと、
ダイアログベースで楽そうな場合はダイアログベースでは使い、難しい場合はCreateWindowを使うという事ですよね、
あなたの主観で答えて下さって結構ですので
そうでない場合がどのような場合であるかを教えて下さい。
ウィンドウ内に直接描画するような時は普通はダイアログは使わない。
FillThread(
>>995 , 5, UME);
UME
UME
UME
UME
UME
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。