ファイルをPC外に持ち出されないように、
エクスプロラーで、「コピー」操作を
行った段階で、その事をDelphiから
感知する方法はありますでしょうか。
いわゆるクリップボード監視アプリでは似たようなことやっているけど、
ドラッグアンドドロップとか、ファイルダイアログでのファイル移動操作とかも考慮すると、
完全に防ぐのは難しい。
satoといいます。
ファイルをPC外に持ち出されないように、
エクスプロラーで、「コピー」操作を
行った段階で、その事をDelphiから
感知する方法はありますでしょうか。
よろしく、お願いします。
Windows2000 Delphi6.0です。
MLと2chでマルチする人も珍しい
フィルタドライバってネットに資料全然ないな(英語では調べてないけど)
ファイルを暗号化して別ファイルとして保存、別のプログラムで復号したら
トラッキングするのはかなり難しくなりそうだけど・・・
難しいというか、面倒と言うべきかな
929 であげた資料は日本語ですが...
普通の SDK の外の資料だからあまり読む人はいないのかもしれないけど、
プリンタドライバとかでも必要だから、読む人は読んでいるんだろう。
ファイルシステムを丸ごと作るわけではなく、ミニポートドライバを作るだけで
すむから、速度を気にしなければ COM が使える人なら簡単なんだけどね
936 :
デフォルトの名無しさん:2005/09/01(木) 13:39:09
すみません教えてください。
Win32APIのReadConsoleとか使ってコンソールアプリを作っているのですが
パスワード入力のところで、エコーバック無しで入力させたいのですが
どのようにすれば良いのでしょうか?
SetConsoleModeとか?いろいろやってみたのですがダメです。
937 :
936:2005/09/01(木) 16:00:25
ありゃりゃ、このスレってよく見たら氏んでた?
Win32API質問箱でもいってくる。
マルチになるんでこの質問はスルーしてください。
Delphiでコンソールってあんまりやらないからな
まあ、がんばってくれや
939 :
デフォルトの名無しさん:2005/09/28(水) 20:37:06
DLL を使うアプリなんだけど、
もしDLLが無ければそのDLLを吐き出して終了して
次実行したらDLLが使えるというような仕掛けにしようと思うのだけど、
実行時動的リンク だと大量にある関数をいちいちポインタ表現するのが面倒
ロード時動的リンク だと、ロード時にエラーメッセージが出るのは良いとしても
その後の実行で SysInit InitializeModule 内でメモリアクセスエラーが出て強制終了されてしまう。
スマートな解決方法は何かあるかな?
案1、別の実行ファイルでDLLがあるかどうかだけチェックする・・・・結局格好悪いし普段の起動が遅くなる
案2、_InitExe を書き換えてしまう。 ・・・・これだけの為にはチョッと・・・
DLLをロードする前にチェックするんじゃだめなのか?
>>940 それは実行時動的リンクでしょ。
なにせ100近く関数があるから
全部の関数ポインタとを書くのは、ちょっと勘弁してくれって感じ。
・・・・でもそうするしかないか。
みんなどうしてるんだろ? 正規表現置換でやれば、それほどでも無いのかな?
>DLL を使うアプリなんだけど、
>もしDLLが無ければそのDLLを吐き出して終了して
>次実行したらDLLが使えるというような仕掛けにしようと思うのだけど、
別に終了する必要はないし・・・そのまま動的リンクへ
>実行時動的リンク だと大量にある関数をいちいちポインタ表現するのが面倒
>ロード時動的リンク だと、ロード時にエラーメッセージが出るのは良いとしても
>その後の実行で SysInit InitializeModule 内でメモリアクセスエラーが出て強制終了されてしまう。
>スマートな解決方法は何かあるかな?
面倒でも動的リンクでいちいち記述するのが逆にスマートかも
>>939読んで何かつっかかえていたんだが、ヘルプひっくりかえして思い出した。
Delphi for .NETには仮想ライブラリインターフェースっつうDLLの遅延ロードに便利そうなものが新設されてた。
まあ_InitExeなんて書いてるぐらいだから.NETはお呼びでないだろうが。
944 :
939:2005/09/28(水) 21:33:59
今まで、実行時動的リンクする時は
procedure Hoge(hage:Integer);
begin
if assigned(pHoge) then Hoge(hage) else MyRaise( 'Hoge');
end;
こんな感じのを作ってたけど、
さすがにこれを100も書くのは無理。
それをあきらめて、直接間接コールさせれば、 正規表現置換で出来そう。
>>943 うん。 いまだにD5だし
ロード時動的リンクでロードできなかったらDLLを吐いた後即座に終了して、
自分自身を再実行させるんではだめですか
再実行は終了直前に別のプロセスとして起動させるか
batファイルを吐いて実行させるか
946 :
939:2005/09/28(水) 22:02:12
>>945 ロード時動的リンクはOSがまずエラーメッセージを出すみたい。
これはいいんだけど、
ロード時動的リンクに失敗すると、Delphiで作ったアプリは
その後のセットアップルーチン内でメモリアクセスエラー出してしまうんで
結局DLLを吐き出す事が出来んのです。
それには、スタートアップルーチンである InitExeを書き換えてしまうしかない
で結局
procedure Hoge(hage:Integer); stdcall;
↓
procedure RaiseHoge(hage:Integer); stdcall;begin MyRaise('Hoge');
type THoge = procedure (hage:Integer); stdcall;
var Hoge:THoge;
さらに
p=GetProcAddress(hModule, 'Hoge'); if p=nil then Hoge=RaiseHoge else Hoge=THoge(p);
とやれば、正規表現置換でなんとかなりそう
なるほどね
ただLoader.exeの可能性も考えていいんじゃないか?
programからVCL抜きで小さいの作れば起動もそれほど遅くならないし
それはそれでスマートだと思うけど
とか何とかやってる間に100個位書けるんジャマイカ
要は実行タイミングが得られればいいんだろ?
もう一個DLL作って、それが最初にロード時リンクされるように
順番を調整して、そのDLLの中で目的のDLLの存在確認をとる
なんてのはどうだ?
思いついただけだが。
それか、_InitExe直せるぐらいなら自己書き換えなんて楽勝だろ。
.exeでもDLL同様にエクスポートはできるから、
100個の関数をプロトタイプと名前を合わせた
ダミー関数として作っておいて自身のエクスポートテーブルに載せる。
あとは自身のエクスポートテーブルを参照して、
各関数と同名でGetProcAddressして、結果によって
ダミー関数の実体を書き換えてやれば…。
思いついただけだってば。
951 :
デフォルトの名無しさん:2005/10/13(木) 18:33:55
procedure TForm1.Button1Click(Sender: TObject);
var
Form2: TForm2;
begin
Form2 := TForm2.Create(self);
Form2.Show;
Form2.Parent := self;
end;
↑
こうして実行すると、チャイルドウィンドウとしてForm2が開かれます。
ここでForm2がForm1の範囲をはみ出すとForm1にスクロールバーが出ます。
その後マウスでForm2移動してを内側にした上でスクロールバーをクリックすると、
エラーが出ます。(スクロールバーはVerzとHorzと両方の場合のみ)
これって何でエラーが出るんでしょうか?
対策として、Form2が動いたときForm1のスクロールのアップデートをしようかと思っていますが、
どういうコードに
MDIFormではダメなの?
953 :
951:2005/10/13(木) 18:46:45
>>952 あ、その存在を忘れていました。
確かにMDIフォームならスクロールバーはリアルタイムに直されますね。
でも、ボタンの下にForm2が入っちゃう。
954 :
951:2005/10/13(木) 18:55:57
やっぱりMDIフォームじゃない解決策お願いします。
Form を Form に貼り付けるような厨房アプリなんてつくるなよー
>>955 フレームがない頃はFormPanelなんてのがあったりしたなぁ。
今でもドッキングがあるし、普通じゃない?。
なら、ドッキングさせりゃいいじゃない
Frame もすでにあるし
959 :
デフォルトの名無しさん:2005/10/31(月) 09:03:33
TPanelとか、回転できますか?
そのままの形では回転できない。モニタ回すしかない。
じゃあ、TPanelに回転機能を付けたコンポーネント希望。
ネットに落ちてないかな?
>>959 >>961 ここってDel上級者用じゃないのか?
回転したいpanelのRectを部分の画像をコピーして回転させればイイじゃん。
それを別で表示
965 :
デフォルトの名無しさん:2005/10/31(月) 13:37:41
>>962 その内容をコンポーネント化する方法きぼんぬ。
画像を回転してもウィンドウを回転したことにならないよ
TPanel は子ウィンドウなのでウィンドウとしての性質はOSが決めている。
だから真の意味では回転できない。
968 :
959:2005/10/31(月) 13:49:35
ウィンドウ自体回転になってなくても良いです。
でも、TImage(おっと、今使ってるのTPanelじゃなかった、TImageのビットマップだった)の中の
ビットマップの人が回転してて欲しいでつ。
イメージ 回転 Delphi でググル
Canvas.Pixels[X,Y]でアクセスすると激遅になるだろうし、
結構面倒だね。
972 :
962:2005/10/31(月) 16:39:56
>>971 Scanlineで取る事ぐらいするだろww
上級スレにしては回答も低級すぎだな
煽れば教えてもらえるという考えは誤りです。
975 :
デフォルトの名無しさん:2005/11/01(火) 15:17:59
2005でMSAccess2003で作ったdb1.mdbに接続したいのですが、
データエクスプローラでMSAccessに新しい接続を追加して
「接続の変更」でプロパティ画面見たいのを出して、
「Database」のところにdb1.mdbのパスを入力して
「Password」と「UserName」をくうらんにして
テストを押したのですが、
「接続が開きませんでした」とメッセージが出て接続できません。
誰かお知恵を貸してください。
976 :
デフォルトの名無しさん:2005/11/02(水) 12:22:53
既にあるExeファイルのアイコンを書き換えようと思っているんですけど
どうすればできるのでしょうか?
Delphiに限らずどこかにサンプルとか落ちてないですかね。。。
977 :
デフォルトの名無しさん:
>>976 UpdateResourceでできるようです。