System.Runtime.InteropServices
kullanabilirsiniz ama soruyu anlamadım.[System.Runtime.InteropServices.DllImport("user32.dll")]
public static extern int MessageBox(IntPtr hWnd, String text, String caption, uint type);
static class Program
{
[STAThread]
static void Main()
{
var overlay = new Overlay();
// track windows open (requires WindowsBase, UIAutomationTypes, UIAutomationClient)
Automation.AddAutomationEventHandler(WindowPattern.WindowOpenedEvent, AutomationElement.RootElement, TreeScope.Subtree, (s, e) =>
{
var element = (AutomationElement)s;
if (element.Current.ProcessId != Process.GetCurrentProcess().Id)
{
Console.WriteLine("Added window '" + element.Current.Name + "'");
overlay.AddTrackedWindow(element);
// track window close
Automation.AddAutomationEventHandler(WindowPattern.WindowClosedEvent, element, TreeScope.Element, (s2, e2) =>
{
overlay.RemoveTrackedWindow(element);
});
}
});
Application.Run(overlay);
}
}
// adapted from https://stackoverflow.com/questions/11077236/transparent-window-layer-that-is-click-through-and-always-stays-on-top
public class Overlay : Form // standard Windows Form
{
private readonly HashSet<AutomationElement> _windows = new HashSet<AutomationElement>();
public Overlay()
{
TopMost = true;
FormBorderStyle = FormBorderStyle.None;
WindowState = FormWindowState.Maximized;
MaximizeBox = false;
MinimizeBox = false;
ShowInTaskbar = false;
BackColor = Color.White;
TransparencyKey = BackColor;
}
protected override CreateParams CreateParams
{
get
{
var cp = base.CreateParams;
const int WS_EX_TRANSPARENT = 0x20;
const int WS_EX_LAYERED = 0x80000;
const int WS_EX_NOACTIVATE = 0x8000000;
cp.ExStyle |= WS_EX_LAYERED | WS_EX_TRANSPARENT | WS_EX_NOACTIVATE;
return cp;
}
}
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
foreach (var window in _windows.ToArray())
{
Rect rect;
try
{
rect = window.Current.BoundingRectangle;
}
catch
{
// error, window's gone
_windows.Remove(window);
continue;
}
// draw a yellow rectangle around window
using (var pen = new Pen(Color.Yellow, 2))
{
e.Graphics.DrawRectangle(pen, (float)rect.X, (float)rect.Y, (float)rect.Width, (float)rect.Height);
}
}
}
// ensure we call Invalidate on UI thread
private void InvokeInvalidate() => BeginInvoke((Action)(() => { Invalidate(); }));
public void RemoveTrackedWindow(AutomationElement element)
{
_windows.Remove(element);
InvokeInvalidate();
}
public void AddTrackedWindow(AutomationElement element)
{
_windows.Add(element);
InvokeInvalidate();
// follow target window position
Automation.AddAutomationPropertyChangedEventHandler(element, TreeScope.Element, (s, e) =>
{
InvokeInvalidate();
}, AutomationElement.BoundingRectangleProperty);
}
}
Benim amacım hile değil sadece ekrana yazı yazıcam. Scusty yazıcam filigran eklemekten daha rahat oluyor.Dediğiniz şey C++, C ile yapılabilir ama C# ile başka bir Process'e inject edilebilecek bir DLL yapamazsınız.
İlk arkadaşın attığı dllımport komutu ise C, C++ dillerinden oluşan kütüphaneyi kullanmak içindir yakından uzaktan alakası yok.
Zaten bu yüzden C# ile inject edilen hileler yapılamaz, yapılanlar ya overlay form olur ya da direkt olarak form olur. Dediğiniz için C++, C gibi dillere başlayın.
Dostum csharp ile başka bir uygulamaya inject edilecek bir şey yapamazsın.Benim amacım hile değil sadece ekrana yazı yazıcam. Scusty yazıcam filigran eklemekten daha rahat oluyor.
Bu sitenin çalışmasını sağlamak için gerekli çerezleri ve deneyiminizi iyileştirmek için isteğe bağlı çerezleri kullanıyoruz.